上代码 其中 商户API证书序列号 是在 在微信支付平台->api安全->查看证书中获取到的 能成功说明这个没问题 但现在却提示这个
新证书好几天前就更换的,同时使用新证书正常调用v2的支付和企业付款
我感觉我的代码没什么毛病啊,直接的官方demo 。 希望官方能出来说明一下!
<?php
require 'vendor/autoload.php';
use WechatPay\GuzzleMiddleware\WechatPayMiddleware;
use WechatPay\GuzzleMiddleware\Util\PemUtil;
use GuzzleHttp\HandlerStack;
use GuzzleHttp\Client;
class pay_v3 {
public function my_send_cash_coupon($arr) {
global $_W,$_GPC;
//载入日志函数
if($arr['s_token']!='yft'){
return false;
}
// 商户相关配置
$merchantId = $arr['mchid'];// 商户号
$merchantSerialNumber = $arr['serial_no']; // 商户API证书序列号
$merchantPrivateKey = PemUtil::loadPrivateKey(MODULE_ROOT.'/cert/'.$_W['uniacid'].'.apiclient_key.pem'); // 商户私钥
// 微信支付平台配置
$wechatpayCertificate = PemUtil::loadCertificate(MODULE_ROOT.'/cert/'.$_W['uniacid'].'.apiclient_cert.pem'); // 微信支付平台证书
// 构造一个WechatPayMiddleware
$wechatpayMiddleware = WechatPayMiddleware::builder()
->withMerchant($merchantId, $merchantSerialNumber, $merchantPrivateKey) // 传入商户相关配置
->withWechatPay([ $wechatpayCertificate ]) // 可传入多个微信支付平台证书,参数类型为array
->build();
// 将WechatPayMiddleware添加到Guzzle的HandlerStack中
$stack = GuzzleHttp\HandlerStack::create();
$stack->push($wechatpayMiddleware, 'wechatpay');
// 创建Guzzle HTTP Client时,将HandlerStack传入
$client = new GuzzleHttp\Client(['handler' => $stack]);
//组装对应的链接
$data=array();
$data['stock_id']=$arr['couponcardid'];
$data['out_request_no']=$arr['mchid']. date('Ymd') .'hxqlq'. $arr['awid'];
$data['appid']=$arr['mch_appid'];
$data['stock_creator_mchid']=$arr['mchid'];
if(!empty($arr['coupon_value']) ){
$data['coupon_value']=$arr['coupon_value'];
}
if(!empty($arr['coupon_minimum']) ){
$data['coupon_minimum']=$arr['coupon_minimum'];
}
// 接下来,正常使用Guzzle发起API请求,WechatPayMiddleware会自动地处理签名和验签
try {
$resp = $client->request('POST', 'https://api.mch.weixin.qq.com/v3/marketing/favor/users/'.$arr['openid'].'/coupons', [
'json' => $data,
'headers' => [ 'Accept' => 'application/json' ]
]);
if ($resp->getStatusCode() < 200 || $resp->getStatusCode() > 299) {
return array('errno'=>$resp->getStatusCode(),'message'=>$resp->getBody());
}
$list = @json_decode($resp->getBody(), true);
return $list;
} catch (\Throwable $e) {
//} catch (RequestException $e) {
// 进行错误处理
$error=-5;
var_dump('错误处理');
$errinfo=$e->getMessage();
if ($e->hasResponse()) {
$errinfo.= "\n".$e->getResponse()->getStatusCode().' '.$e->getResponse()->getReasonPhrase();
$errinfo.= "\n".$e->getResponse()->getBody();
}
var_dump($errinfo);
exit();
return array('errno'=>$error,'message'=>$errinfo);
}
return false;
}
}
// 微信支付平台证书
这个参数 不是下载来的证书,而是通过代码接口 获取的证书 https://api.mch.weixin.qq.com/v3/certificates
还有第一次下载证书通过
这些在demo 中没有显示出来
https://developers.weixin.qq.com/community/develop/doc/0000c23f5e42689ba66aab61c52800?_at=1591671424240,你好,建议参考一下这里。看看是不是你这边弄错了证书。谢谢。