收藏
回答

应答的微信支付签名验证失败?使用的是官方demo,发送代金券,发送成功但try 中却拦截提示这个?

上代码 其中 商户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;
	}
	
	
}
回答关注问题邀请回答
收藏

2 个回答

登录 后发表内容
问题标签