3 个回答

那个请求https://api.mch....是交给后台处理的,
下面代码里的data就是后台处理后的数据,prepay_id也是后台去请求你那个地址获取到的。

我的步骤是这样的:

  1. 调用wx.login获取code
  2. code和你的订单信息传给后台
  3. 后台用code获取到用户openid,然后去获取订单对应的prepay_id,并返回给前端需要的信息,即代码里的data
  4. 前端拿到返回data后拼接出需要的东西(这个sign其实也可以由后端拼接好放到data里返回),然后调用wx.requestPayment发起支付。

而且小程序是没法把https://api.mch...添加到服务器域名列表的。如果不是测试环境,可以说是必须交给后台处理的。

微信文档里好像有写好的专门api去处理微信返回的xml数据的。

var timestamp = data.timestamp + ''

var appId = data.appid
var key = data.key
var prepay_id = data.prepay_id
var nonce_str = data.nonce_str

var sign = '';
var signA = "appId=" + appId + "&nonceStr=" + nonce_str + "&package=prepay_id=" + prepay_id + "&signType=MD5&timeStamp=" + timestamp;
var signB = signA + "&key=" + key;
sign = MD5Util.md5(signB).toUpperCase();

wx.requestPayment({
    timeStamp: timestamp,
    nonceStr: nonce_str,
    package: "prepay_id=" + prepay_id,
    signType: 'MD5',
    paySign: sign,
    success: function (data) {
        success(data)
    },
    fail: function (res) {
        fail(res)
    }
})

微信支付发起统一下单的接口好像是不接受json格式的post参数的,你需要转成xml格式发起。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进