码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 微信 商家转账到零钱 二


    本来想手写,但是有sdk 就没必要这么麻烦。

    composer地址:wechatpay/wechatpay - Packagist

    微信官网sdk,给的是github,打不开。

    一 sdk使用

    1. require_once 'vendor/autoload.php';
    2. defined('ROOT_PATH') or define('ROOT_PATH', './');
    3. use WeChatPay\Builder;
    4. use WeChatPay\Crypto\Rsa;
    5. use WeChatPay\Util\PemUtil;
    6. class Test
    7. {
    8. public function payconfig2()
    9. {
    10. $config = [
    11. 'appid' => 'appid',
    12. 'mchid' => '商户号',
    13. 'key' => 'key',
    14. 'serial_no' => '证书序列号',
    15. ];
    16. return $config;
    17. }
    18. private function getpems()
    19. {
    20. $arr = [
    21. 'SSLCERT' => ROOT_PATH . "/cert/apiclient_cert.pem",
    22. 'SSLKEY' => ROOT_PATH . "/cert/apiclient_key.pem",
    23. ];
    24. return $arr;
    25. }
    26. public function dotest()
    27. {
    28. $pems = $this->getpems();
    29. $config = $this->payconfig2();
    30. $merchantPrivateKeyFilePath = file_get_contents($pems['SSLKEY']);
    31. $merchantPrivateKeyInstance = Rsa::from($merchantPrivateKeyFilePath, Rsa::KEY_TYPE_PRIVATE);
    32. // 「商户API证书」的「证书序列号」
    33. $merchantCertificateSerial = $config['serial_no'];
    34. $merchantId = $config['mchid'];
    35. // 从本地文件中加载「微信支付平台证书」,用来验证微信支付应答的签名
    36. $platformCertificateFilePath = file_get_contents($pems['SSLCERT']);
    37. $platformPublicKeyInstance = Rsa::from($platformCertificateFilePath, Rsa::KEY_TYPE_PUBLIC);
    38. // 从「微信支付平台证书」中获取「证书序列号」
    39. $platformCertificateSerial = PemUtil::parseCertificateSerialNo($platformCertificateFilePath);
    40. // 构造一个 APIv3 客户端实例
    41. $instance = Builder::factory([
    42. 'mchid' => $merchantId,
    43. 'serial' => $merchantCertificateSerial,
    44. 'privateKey' => $merchantPrivateKeyInstance,
    45. 'certs' => [
    46. $platformCertificateSerial => $platformPublicKeyInstance,
    47. ],
    48. ]);
    49. // 发送请求
    50. $resp = $instance->chain('v3/certificates')->get(
    51. ['debug' => true]// 调试模式,https://docs.guzzlephp.org/en/stable/request-options.html#debug
    52. );
    53. echo $resp->getBody(), PHP_EOL;
    54. }
    55. }
    56. $t = new Test();
    57. $t->dotest();

    证书序列号需要去商户平台看。

    其次这个key有v2、v3之分。问过别人这俩版本不共用。

    • 文件名是 apiclient_key.pem 的,是 「商户私钥」文件
    • 文件名是 apiclient_cert.pem 的,是 「商户证书」文件

    二 证书生成

    上面例子中用的SSLCERT证书可以用于退款,是从微信后台直接生成。而支付的证书需要使用这个框架中的代码生成。

    详见:https://github.com/wechatpay-apiv3/wechatpay-php

    composer exec CertificateDownloader.php -- -k ${apiV3key} -m ${mchId} -f ${mchPrivateKeyFilePath} -s ${mchSerialNo} -o ${outputFilePath}

    必须linux环境下运行,windows环境下运行不会生成证书。

    将生成的证书替换SSLCERT的值,就能正常运行了~ 因为是新生成的证书,不影响旧的证书,即不影响旧证书涉及的其他问题。

    三 参考

    微信支付:API商户证书序列号serialNo获取-YES开发框架网

    TP6下微信支付wechatpay-apiv3之wechatpay-php使用,包括下单、支付、查询、关闭_哈喽吧

    商户证书序列号有误。请使用签名私钥匹配的证书序列号?-CRMEB社区

  • 相关阅读:
    Spring概述以及IoC和DI的使用
    【SDS V6 专题】开放内容平台,XOCP 助力数据常青
    01Spring的Ioc思想和依赖注入手段(DI)
    生产过程建模在MES管理系统中的重要性
    C# .NET Core API 注入Swagger
    CSS魔术师Houdini,用浏览器引擎实现高级CSS效果
    MySQL进阶
    ElasticSearch01_简介、详解倒排索引、安装es以及kibana、检索es基本信息、增删改查文档
    用HTML+CSS做一个漂亮简单的个人网页——樱木花道篮球3个页面 学生个人网页设计作品 学生个人网页模板 简单个人主页
    java版本企业电子招标采购系统源码Spring Cloud + Spring Boot +二次开发
  • 原文地址:https://blog.csdn.net/lsswear/article/details/134295113
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号