援引自: https://packagist.org/packages/wechatpay/wechatpay 回调通知 回调通知受限于开发者/商户所使用的`WebServer`有很大差异,这里只给出开发指导步骤,供参考实现。 1. 从请求头部`Headers`,拿到`Wechatpay-Signature`、`Wechatpay-Nonce`、`Wechatpay-Timestamp`、`Wechatpay-Serial`及`Request-ID`,商户侧`Web`解决方案可能有差异,请求头可能大小写不敏感,请根据自身应用来定; 2. 获取请求`body`体的`JSON`纯文本; 3. 检查通知消息头标记的`Wechatpay-Timestamp`偏移量是否在5分钟之内; 4. 调用`SDK`内置方法,[构造验签名串](https://pay.weixin.qq.com/wiki/doc/apiv3/wechatpay/wechatpay4_1.shtml)然后经`Rsa::verfify`验签; 5. 消息体需要解密的,调用`SDK`内置方法解密; 6. 如遇到问题,请拿`Request-ID`点击[这里](https://support.pay.weixin.qq.com/online-service?utm_source=github&utm_medium=wechatpay-php&utm_content=apiv3),联系官方在线技术支持; 样例代码如下: <?php use WeChatPay\Crypto\Rsa; use WeChatPay\Crypto\AesGcm; use WeChatPay\Formatter; $inWechatpaySignature = '';// 请根据实际情况获取 $inWechatpayTimestamp = '';// 请根据实际情况获取 $inWechatpaySerial = '';// 请根据实际情况获取 $inWechatpayNonce = '';// 请根据实际情况获取 $inBody = '';// 请根据实际情况获取,例如: file_get_contents('php://input'); $apiv3Key = '';// 在商户平台上设置的APIv3密钥 // 根据通知的平台证书序列号,查询本地平台证书文件, // 假定为 `/path/to/wechatpay/inWechatpaySerial.pem` $platformPublicKeyInstance = Rsa::from('file:///path/to/wechatpay/inWechatpaySerial.pem', Rsa::KEY_TYPE_PUBLIC); // 检查通知时间偏移量,允许5分钟之内的偏移 $timeOffsetStatus = 300 >= abs(Formatter::timestamp() - (int)$inWechatpayTimestamp); $verifiedStatus = Rsa::verify( // 构造验签名串 Formatter::joinedByLineFeed($inWechatpayTimestamp, $inWechatpayNonce, $inBody), $inWechatpaySignature, $platformPublicKeyInstance ); if ($timeOffsetStatus && $verifiedStatus) { // 转换通知的JSON文本消息为PHP Array数组 $inBodyArray = (array)json_decode($inBody, true); // 使用PHP7的数据解构语法,从Array中解构并赋值变量 ['resource' => [ 'ciphertext' => $ciphertext, 'nonce' => $nonce, 'associated_data' => $aad ]] = $inBodyArray; // 加密文本消息解密 $inBodyResource = AesGcm::decrypt($ciphertext, $apiv3Key, $nonce, $aad); // 把解密后的文本转换为PHP Array数组 $inBodyResourceArray = (array)json_decode($inBodyResource, true); // print_r($inBodyResourceArray);// 打印解密后的结果 }
支付回调验证 偶然失败 !!! 偶然失败!!!PHP自己撸的代码. 搞不懂有些延签能过,有些验签不能过,多数都能过 这种偶然性的东西我真是头大了..... 公钥肯定是没问题的 从$_SERVER中取值出问题了? 还是$body取值有问题? 还是base64_decode有什么特殊隐藏技巧? //这个有隐藏技巧? $body=file_get_contents('php://input'); //还是我这里写的有毛病..? $nonce=isset($_SERVER['HTTP_WECHATPAY_NONCE'])?$_SERVER['HTTP_WECHATPAY_NONCE']:''; $wx_cert_no=isset($_SERVER['HTTP_WECHATPAY_SERIAL'])?$_SERVER['HTTP_WECHATPAY_SERIAL']:''; $sign_base64_str=isset($_SERVER['HTTP_WECHATPAY_SIGNATURE'])?$_SERVER['HTTP_WECHATPAY_SIGNATURE']:''; $timestamp=isset($_SERVER['REQUEST_TIME'])?$_SERVER['REQUEST_TIME']:''; //公钥铁定没问题,不然延签也不会过啊 $wx_key=file_get_contents('下载的微信公钥'); //这个很少用.不确定. 反正我整了一晚上 愣是没搞明白 这种偶然性 $res=openssl_verify($message,base64_decode($sign_base64_str),$wx_key,'sha256WithRSAEncryption'); if ($res=="1"){ return true; }else{ return false; }
2021-12-30把 $redirect_uri 打印出来,肉眼跟 注释掉的比较看,哪里有不一样的,问题点就在那里
网页授权redirect_uri,变量拼接返回后缺少参数,但是链接写死返回就正常网页授权redirect_uri,变量拼接返回后缺少参数,但是链接写死返回就正常 [图片] [图片]
2021-12-30https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter10_2_11.shtml 平台已经把这项能力发展到了第二代了,建议及时对接,掌握特约商户的“被诉”以及“应诉”对接,可能是目前最有效的方案。
关于收付通处罚商家二级账户 通知电商平台的问题1商户账号被禁收款能力问题 (1)问题说明 平台型电商平台会有很多商家入驻,这些商家申请收付通二级商户号时提交的资料满足要求,此时商家的收付通账户可以正常收款;后续可能因为商户做了什么违规行为 收到了微信处罚封禁了二级商户号收款能力; 此后此商户的买家购物时发现付款失败 会找到商户,商户会找到电商平台方认为是电商平台的问题; (2)问题影响与希望的解决方案 电商平台提供给买家的支付方式无法使用是个很大的体验问题,也是个很影响平台核心利益的问题,当某个支付方式无法使用时,电商平台首先要做的肯定是 停止问题收款渠道,引导买家到无问题的收款渠道,然后再异步修复问题收款渠道; 此时需要微信在处罚商家二级商户号时通知电商平台方,此问题我年初就反馈过,但是微信最新提供的新接口https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter10_3_5.shtml 并没有将影响平台运行的处罚结果以枚举值的方式说明。处罚方式用文本说明的话平台方如何判断 具体影响的功能(收款、分账、资金解冻 ?); 另外如何引导商户去微信申诉,以APP为载体的平台最好是能通过APP跳转微信,但这个申诉渠道 上述文档没有说明 2.商户账号被封禁分账能力问题 (1)问题说明 平台型电商主要收入来源于订单手续费/扣点,对应使用收付通里面的分账接口实现,但在我平台接入后的半年应用内,经常碰到因为二级商户的分账权限被封 导致电商平台分不到手续费,然后收付通另有付款超180天自动解冻货款的限定,也就是说如果二级商户分账权限一直没恢复,平台就会损失对应订单的扣点手续费 (2)问题影响与希望的解决方案 二级商户号被风控限制一些权限是可以理解的,但如果影响接入的电商平台利益 是不可接受的,收付通风控的是商家二级商户号,不应该限制电商平台分账手续费(如果担心平台扣取的手续费的合规性,可以在完成分账后冻结电商平台一级商户号对应资金额,但不要阻断业务流程)。二级商户侧 存量限制提现 ,增量关闭收款即可 ; 另外收付通不应该提供给商户脱离电商平台的提现入口,商户提现货款必须经过电商平台一级商户号的请求。
2021-12-29PHP代码上的164-165行不用加; postman截图上array,明显能看到 id_card_name 没有加密;加密代码在lib readme上有写,如: <?php use WeChatPay\Crypto\Rsa; // 做一个匿名方法,供后续方便使用,$platformPublicKeyInstance 见初始化章节 $encryptor = static function(string $msg) use ($platformPublicKeyInstance): string { return Rsa::encrypt($msg, $platformPublicKeyInstance); }; $resp = $instance ->chain('v3/applyment4sub/applyment/') ->post([ 'json' => [ 'business_code' => 'APL_98761234', 'contact_info' => [ 'contact_name' => $encryptor('张三'), 'contact_id_number' => $encryptor('110102YYMMDD888X'), 'mobile_phone' => $encryptor('13000000000'), 'contact_email' => $encryptor('abc123@example.com'), ], //... ], 'headers' => [ // $platformCertificateSerial 见初始化章节 'Wechatpay-Serial' => $platformCertificateSerial, ], ]);
微信支付,进件一直返回参数异常?"code": "PARAM_ERROR", "message": "结算银行账户开户名称(bank_account_info/account_name)有误:选择“对公银行账户”时,开户名称必须与营业执照或登记证书上的“商户名称”一致" 看网上一些人说是 utf-8 编码问题,微信支付客服也说是我传过来的中文被编码了。可具体该怎么做呢。好难啊~~~~ [图片]
2021-12-28wechat::$merchantPrivateKeyFilePath 这个字符串路径,需要带 file:// 协议
微信支付+使用wechatpay-php开发+构建一个客户端实例 Rsa::from 报错?提示错误:Cannot load privateKey from(string), please take care about the \$thing input. /** * 构建一个客户端实例 * wechatpay-php */ public static function instanceWeChatPay() { // 商户号 $merchantId = WeChat::$merchantId; // 从本地文件中加载商户API私钥,商户API私钥会用来生成请求的签名 $merchantPrivateKeyInstance = Rsa::from(WeChat::$merchantPrivateKeyFilePath, Rsa::KEY_TYPE_PRIVATE); dd( $merchantPrivateKeyInstance ); // 商户API证书序列号 $merchantCertificateSerial = WeChat::$merchantCertificateSerial; // 从本地文件中加载微信支付平台证书,用来验证微信支付应答的签名 $platformPublicKeyInstance = Rsa::from(WeChat::$platformCertificateFilePath, Rsa::KEY_TYPE_PUBLIC); // 获取微信支付平台证书序列号 $platformCertificateSerial = PemUtil::parseCertificateSerialNo(WeChat::$platformCertificateFilePath); // 构造一个 APIv3 客户端实例 WeChat::$instance = Builder::factory([ 'mchid' => $merchantId, 'serial' => $merchantCertificateSerial, 'privateKey' => $merchantPrivateKeyInstance, 'certs' => [ $platformCertificateSerial => $platformPublicKeyInstance, ], ]); }
2021-12-27两种处理方式: 1. file://D:\... 协议file://不能少(你少了); 2. file_get_content('d:\....'); (不推荐)
wechatpay-php 报错Cannot load privateKey fromwechatpay-php 报错 Rsa::from 报错 Cannot load privateKey from(string), please take care about the \$thing input /** * 构建一个客户端实例 * wechatpay-php */ public static function instanceWeChatPay() { // 商户号 $merchantId = WeChat::$merchantId; // 从本地文件中加载商户API私钥,商户API私钥会用来生成请求的签名 //dd(WeChat::$merchantPrivateKeyFilePath); 路径 //"D:\web\3boat\storage\cert\wechat\4C1BBE189365B735FF1B7AE9A63EDCB7CDA49093\apiclient_key.pem" $merchantPrivateKeyInstance = Rsa::from(WeChat::$merchantPrivateKeyFilePath, Rsa::KEY_TYPE_PRIVATE); dd($merchantPrivateKeyInstance); // 商户API证书序列号 $merchantCertificateSerial = WeChat::$merchantCertificateSerial; // 从本地文件中加载微信支付平台证书,用来验证微信支付应答的签名 $platformPublicKeyInstance = Rsa::from(WeChat::$platformCertificateFilePath, Rsa::KEY_TYPE_PUBLIC); // 获取微信支付平台证书序列号 $platformCertificateSerial = PemUtil::parseCertificateSerialNo(WeChat::$platformCertificateFilePath); // 构造一个 APIv3 客户端实例 WeChat::$instance = Builder::factory([ 'mchid' => $merchantId, 'serial' => $merchantCertificateSerial, 'privateKey' => $merchantPrivateKeyInstance, 'certs' => [ $platformCertificateSerial => $platformPublicKeyInstance, ], ]); }
2021-12-27show代码
微信支付图片上传接口不返回数据是什么情况按文档操作 header头也给了 验签工具 验签也通过了 body也按文档的要求弄了 为啥不返回数据哦 一直false什么情况 有人遇到过没
2021-12-26看这里你能感知到请求的完整数据结构,比如:https://github.com/TheNorthMemory/wechatpay-openapi/blob/b20adb4e541969bc99eda0f6241ca2c3a8ef56c2/src/V3/Smartguide/Guides.php#L19-L33 <?php public function post(array $options = [ 'json' => [ 'sub_mchid' => '', 'corpid' => '', 'store_id' => 0, 'userid' => '', 'name' => '', 'mobile' => '', 'qr_code' => '', 'avatar' => '', ], 'headers' => [ 'Wechatpay-Serial' => '', ], ]): ResponseInterface;
商户上送敏感信息时使用微信支付平台公钥加密,要在http头携带微信支付平台证书序列号,如何理解?https://pay.weixin.qq.com/wiki/doc/apiv3_partner/wechatpay/wechatpay4_3.shtml文档中: 商户上送敏感信息时使用微信支付平台公钥加密,证书序列号包含在请求HTTP头部的[代码]Wechatpay-Serial[代码]是直接在http头中增加“Wechatpay-Serial”属性,带上微信支付平台证书即可? 不是在“Authorization”里面增加子属性吧?
2021-12-22谢邀,建议换谷歌浏览器试试
流量主页面一片空白?我的appid 是wxa8068a200734b9bf,流量主收入从未结算过[图片]
2021-12-22谢邀。 商户号 开通了「付款至零钱」产品权限了吗? 商户号 有没有与 小程序APPID 做关联? 上述俩问题都是yes的情况下,就能发起。
小程序和商户号主体不同能发起企业付款吗?我司有一个小程序和一个商户号,但是他们的主体不同,这样的情况能发起企业付款至零钱吗?
2021-12-21