WxPayApi::unifiedOrder($config,$wxOrderData)返回参数签名的问题求助:

来源:10-26 支付的服务器端编写 九

the_blessed

2020-01-01

WxPayApi::unifiedOrder(config,config,config,wxOrderData)返回参数签名的问题求助:

private function getPaySignature($wxOrderData){
    $config = new WxPayConfig();
    $wxOrder = WxPayApi::unifiedOrder($config,$wxOrderData);
    if ($wxOrder['return_code'] != 'SUCCESS' || $wxOrder['result_code'] != 'SUCCESS'){
        Log::record($wxOrder,'error');
        Log::record('获取预支付订单失败','error');
    }
    //prepay_id
    $this->recordPreOrder($wxOrder);
    $signature = $this->sign($wxOrder,$config);
    return $signature;
}
private function sign($wxOrder,$config){
    $jsApiPayData = new WxPayJsApiPay();
    $jsApiPayData->SetAppid(config(['wx.app_id']));
    $jsApiPayData->SetTimeStamp((string)time());

    $rand = md5(time() . mt_rand(0,1000));
    $jsApiPayData->SetNonceStr($rand);

    $jsApiPayData->SetPackage('prepay_id='.$wxOrder['prepay_id']);
    $jsApiPayData->SetSignType('md5');

    $sign = $jsApiPayData->MakeSign($config);
    $rawValues = $jsApiPayData->GetValues();
    $rawValues['paySign'] = $sign;

    unset($rawValues['appId']);

    return $rawValues;
}

getPaySignature方法中的config = new WxPayConfig(),是我对SDK中的抽象接口类的重定义的一个类;我在这里建立了这个对象,是因为在WxPayApi::unifiedOrder(config,wxOrderData)和MakeSign(config)方法中都用到这个对象,在定义sign这个方法时,我也比你视频里面的多了一个参数,用来接收config这个对象,供sign里调用MakeSign方法时用;
我上面这样做是不是对的?如果是对的,那sign方法中的SetSignType(‘md5’)是不是要删除?因为我看到MakeSign方法中去调用了Config对象中对应的方法确定了签名类型。

我在小程程序开发工具中,点“申请令牌”—》支付,可以在我的小程序开发工具上面显示一个二维码,但是我用我的微信扫一下,手机微信上显示“支付验证签名失败”

写回答

3回答

草芽有芳华

2020-08-06

你解决这个问题了吗?

0
2
草芽有芳华
回复
the_blessed
那你现在有时间帮我一下吗?我qq:1286460303。或者等你有时间的时候
2020-08-06
共2条回复

7七月

2020-01-03

签名类型应该不是这个问题,文档发来我看下

0
0

the_blessed

提问者

2020-01-01

我在小程程序开发工具中,点“申请令牌”---》支付,可以在我的小程序开发工具上面显示一个二维码,但是我用我的微信扫一下,手机微信上显示“支付验证签名失败”

0
0

微信小程序电商实战 从前端到后端的全流程精讲

全栈工程师/前后端都讲/架构思想/ RESTFul API、MySQL表设计

4805 学习 · 4382 问题

查看课程