问题描述:在PC模拟器支付正常,但手机端统一下单接口unifiedOrder报错spbill_create_ip empty
unifiedOrder需要传入设备ip(定死随便写一个也行,如:127.0.0.1),但不填是会报错的。
解决思路,先是获取设备ip,然后传给云函数
1.在JS获取设备ip,请求url需要配置request域名
wx.request({
url: 'http://ip-api.com/json',
success:res=> {
console.log("ip =>", res.data.query, res.data);
this.setData({
ip:res.data.query
})
}
})
2.把ip传递给云函数
calls函数封装在下面
app.calls({
name: "do_pay",
data:{ip:this.data.ip},//传递ip
success(res) {
wx.hideLoading();
console.log(res)
if (res.code == 0) {
that.setData(mode.paying)
wx.requestPayment({
...res.pay,
success(res) {
console.log('支付成功!')
that.query_pay()
},
fail(err) {
console.log('支付失败!')
that.query_pay()
}
})
} else if (res.code == 1) {
wx.showModal({
title: '下单失败',
content: res.returnMsg,
showCancel: false
})
}
}
})
//calls函数封装
calls: function (obj) {
console.log(obj)
wx.cloud.callFunction({
name: obj.name,
data: obj.data ? obj.data : {},
success(res) {
console.log(res)
obj.success(res.result);
},
fail(e) {
console.log(e);
wx.hideLoading()
// wx.showModal({
// title:"网络错误",
// content:"你的操作请求由于网络或系统问题中断,请稍后再试"
// })
}
})
}
3.云函数处接收传参并处理,云函数获取传参是event字段,那就是取event.ip
const res = await cloud.cloudPay.unifiedOrder({
body: "测试微信支付功能",
outTradeNo: uid,
spbillCreateIp: JSON.parse(context.environment).WX_CLIENTIP?JSON.parse(context.environment).WX_CLIENTIP:event.ip,//重点是这句
subMchId: sub_mch_id,
totalFee: 1,
envId: "work-01",
functionName: "back_pay",
tradeType: 'JSAPI'
})
if (res.resultCode != 'SUCCESS') {
return {
code: 1,
returnMsg: res.returnMsg
}
}
至此解决问题
微信小程序开发交流QQ群:897729103
本人微信:649231659,承接软件开发&学习交流
微信小程序开发学习视频(含免费课程):
(2022-30节免费)微信小程序开发-60W用户小程序实战基础+进阶--微信开发视频教程-移动开发-CSDN程序员研修院
H5网页-WebSocket(Workerman-PHP)即时通讯 --微信开发视频教程-移动开发-CSDN程序员研修院
从购买服务器(秒杀)配置宝塔LAMP环境(域名解析、免费SSL申请)L--其他视频教程-前端开发-CSDN程序员研修院
从购买服务器(秒杀)配置宝塔LAMP环境(域名解析、免费SSL申请)L--其他视频教程-前端开发-CSDN程序员研修院
微信小程序支付&退款&物流接口思路讲解(付前后台代码+数据库文件)--微信开发视频教程-移动开发-CSDN程序员研修院