收藏
回答

实际测试对接虚拟支付时支付完成了,但是虚拟支付订单列表中用户id不是当前小程序的openid,为啥?

用户端代码:

 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错误

回答关注问题邀请回答
收藏

3 个回答

  • Memory (私信不回复)
    Memory (私信不回复)
    9小时前

    不是你小程序下的openid还能是哪里的openid?

    9小时前
    有用
    回复 2
    • A特亿安田
      A特亿安田
      8小时前
      经查找小程序后台虚拟支付订单列表中的用户id为 我绑定在开放平台用来提交小程序代码的那个小程序的openid
      8小时前
      回复
    • Memory (私信不回复)
      Memory (私信不回复)
      8小时前回复A特亿安田
      你用哪个小程序相关信息调用肯定就是哪个小程序的啊
      8小时前
      回复
  • showms
    showms
    9小时前

    开放平台中小程序的openid是啥?

    9小时前
    有用
    回复 2
    • A特亿安田
      A特亿安田
      8小时前
      我绑定在开放平台用来提交小程序代码的那个小程序的openid
      8小时前
      回复
    • showms
      showms
      5小时前回复A特亿安田
      订单列表里的openid是实际发起支付用户的openid
      5小时前
      回复
  • 智能回答 智能回答 本次回答由AI生成
    22小时前
    有用
登录 后发表内容