小程序appid= wx65abf9de01c6955f
用户登录后,用code换取的openid = okTtO5TKc6evEH_guNljYmAXauSs
商户号:1526204451,已与appid绑定,有java做的后台能正常发券,重新用wechatpay-php开发后遇到问题
调用结果{"code":"INVALID_REQUEST","message":"appid与openid不匹配"}
php源码如下:
public function wxSendCoupons(array $params){
$openid='okTtO5TKc6evEH_guNljYmAXauSs';
$wx = $this->getWxApiInstance();
$resp = $wx
->v3->marketing->favor->users->$openid->coupons
->postAsync([
'headers'=>['Content-type'=>"application/json;charset-utf8"],
'json'=>[
'stock_id'=>'16007953',
'out_request_no'=>'1526204451'.date('Ymd').'-'.'1134123412',
'stock_creator_mchid'=>'1526204451',
'appid'=>'wx65abf9de01c6955f'
]
])
->then(static function ($response) {
$s = $response->getBoday();
error_log('return Data:' . $s, 3, self::$infoFile);
echo $s;
})
->otherwise(static function ($e) {
if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {
$s = $e->getResponse()->getBody();
error_log('return Data:' . $s, 3, self::$infoFile);
echo $s;
return $s;
}
})
->wait();
}
代码改一下:
<?php $resp = $wx ->v3->marketing->favor->users->_openid_->coupons ->postAsync([ 'openid' => $openid, 'json'=>[ 'stock_id'=>'16007953', 'out_request_no'=>'1526204451'.date('Ymd').'-'.'1134123412', 'stock_creator_mchid'=>'1526204451', 'appid'=>'wx65abf9de01c6955f' ] ])
建议安装IDE提示工具包 composer require --dev iwechatpay/openapi,可以很直观看到请求数据结构。
如果java没问题,换成php就有问题,那就不可能是微信的问题,要么是你们的代码写错了,要么是php天然有缺陷?
检查是否满足这两个规则:
校验规则:
1,可用归属商户号绑定的APPID获取的openid
2,可用发券商户绑定的APPID获取的openid
补充一下,$this->getWxApiInstance();就是把获取微信官方SDK创建一个实例,
相当于$instance = Builder::factory(...............)
本部分代码因素导致错误的可能应可排除,可以调用其他接口。