用户端代码:
wx.requestVirtualPayment({
signData: data.pay_data.signData,
mode: data.pay_data.mode,
paySig: data.pay_data.paySig,
signature: data.pay_data.signature,
success: () => {
uni.showLoading({
title: '支付中...'
});
// 轮询查询支付状态
var pollCount = 0;
var maxPoll = 10;
var pollTimer = setInterval(function () {
pollCount++;
btt.Post('/api/o2o.mine/queryPayStatus', {
order_id: data.pay_data.order_id
}, function (res) {
if (res.pay_status === 1 || pollCount >= maxPoll) {
uni.hideLoading();
clearInterval(pollTimer);
that.is_submit = false;
uni.redirectTo({
url: `/pages/mine/publish/succ?tieba_id=${data.tieba_id}&type=${that.type_id}`
});
}
});
}, 1500);
},
complete: () => {
that.is_submit = false;
}
})
服务端签名:
// 支付签名
private function getPaySign($signData, $appkey = '', $uri = 'requestVirtualPayment')
{
return hash_hmac('sha256', $uri . '&' . $signData, $appkey); // 16进制字符串
}
//用户态签名
private function getSignature($signData, $userId)
{
$userModel = new UserModel();
$sessionKey = $userModel->detail($userId, 'token');
trace(['sessionKey'=>$sessionKey,'userId'=>$userId], 'debug');
if (!$sessionKey) {
return '';
}
return hash_hmac('sha256', $signData, $sessionKey); // 16进制字符串
}
//这里的token为 用户登陆小程序是通过https://api.weixin.qq.com/sns/jscode2session接口用code获取到的;
支付都没有问题,也没有报错,一直没想明白为啥支付成功后 虚拟支付订单列表中的用户id怎能会是我绑定在开放平台中小程序的openid;所以导致我查询订单状态时提示我openid错误

不是你小程序下的openid还能是哪里的openid?
开放平台中小程序的openid是啥?