问题:服务商模式。小程序通过云函数实现签名后得到了prepay_id,在小程序端用requestpayment拉起支付,支付的整个流程没有问题,能实现正确的支付。真机调试的时候,非常慢,在云函数传回预支付码后要等5到6秒才能跳出支付界面。而用云函数本地调试模式却非常快就能跳出支付界面,一秒内就出支付框。
不知道是哪里卡住了:
wx.cloud.callFunction({
name: 'pay',
data: {
sub_mchid: that.data.sub_mchid,
out_trade_no: that.data.outTradeNo,//"1217752501201407033233368318",//outTradeNo,
description: "aaa",
amount: {
total: 1,
},
},
success: res => {
console.log('HTTP 请求成功') // 3
console.log('res.result.prepay_id',res.result.prepay_id)
let nonceStr = that.getNonceStr()
let timeStamp = parseInt(Date.now() / 1000)
let paySign =sp_appid + "\n" + timeStamp + "\n" + nonceStr + "\n" + 'prepay_id='+ res.result.prepay_id + "\n"
console.log('paySign=',paySign)
console.log('res', res)
var sign_rsa = new RSA.RSAKey();
sign_rsa = RSA.KEYUTIL.getKey(privatekeyStr);
console.log('签名RSA:')
console.log(sign_rsa)
var hashAlg = 'sha256';
var hSig = sign_rsa.signString(paySign, hashAlg);
hSig = RSA.hex2b64(hSig); // hex 转 b64
console.log("签名结果:" + hSig)
wx.requestPayment
(
{
"timeStamp":timeStamp+'',
"nonceStr": nonceStr,
"package": "prepay_id="+res.result.prepay_id,
"signType": "RSA",
"paySign": hSig,
"success":function(res){
console.log('调用支付接口成功', res)
},
"fail":function(res){
console.log('调用支付接口fail', res)
},
"complete":function(res){
console.log('调用支付接口完成', res)
}
}
)
你好,谢谢你的建议。我也想过这个方法,但是从log来看,这些过程好像没占多长时间,而是明显再开始调用requestpayment这个函数后,卡住了。
这些过程的延时时间有什么方法可以定量分析吗在小程序里?
建议二次签名也在云函数中实现,云函数直接返回wx.requestPayment的5大参数。