评论

全云开发V3支付电商收付通,第一天,统一下单,居然秒过了。

微信支付V3电商收付通踩坑实录之一。

接了个甲方的项目,要求用全云开发实现微信支付V3电商收付通,谈妥后,于是开干。

先看文档,再找攻略,第一步开始写段统一下单的测试代码。非常神奇的事情发生了,居然是秒过的,直接拿到prepaid_id!秒过,秒过,秒过,一个红错误都没有,难以置信;

V3收付通文档:https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/pages/guide.shtml

遥想当年做V2小程序支付,仅一个统一下单的接口,就调得让人欲生欲死,前前后后一个星期不止。

我自己也有点懵圈,这是什么情况,V3新的接口里,签名?Authorization?Headers?这些都是闹着玩的吗?能不能严肃点?

想了一会儿静静,继续,看能不能在小程序里拉起wx.requestPayment,结果V3文档里一句小程序支付的都没有,难道不支持?立马在论坛大佬群里@了一下娇华同学,得到肯定回答,于是,wx.requestPayment拉起,美滋滋地支付了0.01元,统一下单,完美。

云函数相关代码:

//JSAPI下单+JS调起支付
async function partner_transactions_jsapi(event) {
  let wxContext = cloud.getWXContext()
  let jsonStr = JSON.stringify({
    sp_appid: wxContext.APPID,
    sp_mchid: mchid,
    notify_url: config.notify_url,
    payer: {
      sp_openid: wxContext.OPENID
    },
    ...event.unified_order,//小程序端传入的统一下单参数
  })
  let method = 'POST'
  let url = '/v3/pay/partner/transactions/jsapi'
  let headers = getHeaders(method, url, jsonStr)
  let res = await rp({ method, uri: config.host + url, headers, body: jsonStr })
  let prepay_id = JSON.parse(res).prepay_id
  return getPayment(prepay_id) //返回拉起小程序 wx.requestPayment 所需参数
}

小程序端测试代码:

  //JSAPI下单+JS调起支付
  partner_transactions_jsapi: async function () {
    console.log('partner_transactions_jsapi')
    let res = await wx.showModal({content: '统一下单?'})
    if (res.confirm) { } else return
    wx.showToast({ icon: 'loading' })
    let unified_order = { //测试订单
      sub_mchid: SUB_MCHID,
      description: '电商收付通测试',
      out_trade_no: "otn" + Math.random().toString(36).substr(2, 15) + parseInt(Date.now() / 1000),
      amount: {
        total: 10,
        currency: 'CNY'
      },
    }
    res = await wx.cloud.callFunction({
      name: 'wxPayV3',
      data: {
        action: 'partner_transactions_jsapi',
        unified_order
      }
    })
    res = await wx.requestPayment({ ...res.result }).catch(err => console.log(err))
    console.log(res)
    wx.showToast({})
  },


今天先弄这么多,更多踩坑实录继续。


更多相关内容:

最后一次编辑于  2020-10-20  
点赞 1
收藏
评论

3 个评论

  • Ryan 🐾
    Ryan 🐾
    2021-03-24

    你好,请问一下:

    1、进件的主体是小微吗?

    2、是不是在进件时就传了sub_appid,跟商户进行了绑定,之后才能成功下单和支付?

    2021-03-24
    赞同
    回复 3
    • 老张
      老张
      2021-03-24
      1、是;
      2、是
      2021-03-24
      回复
    • Ryan 🐾
      Ryan 🐾
      2021-03-24回复老张
      可是我们用小微进件时传sub_appid,报小微主体不支持
      2021-03-24
      回复
    • 老张
      老张
      2021-03-24回复Ryan 🐾
      才看懂了。这是电商收付通啊,是专为电商平台服务的微信支付服务啊,一般都是被电商平台的所用。还真没碰到在子商户自己小程序上使用服务商的电商收付通来支付的情况。
      2021-03-24
      回复
  • 荣耀
    荣耀
    2021-01-08
    getHeaders这方法是什么,请求需要签名吗?
    
    2021-01-08
    赞同
    回复 1
    • 小程序@小萝卜报名
      小程序@小萝卜报名
      2021-04-18
      这里的getHeaders应该就是签名,所以这里其实就是正常的云开发环境中的电商收付通的实现,否则如果按照云开发环境说的不鉴权的话,就不需要变化headers
      2021-04-18
      回复
  • 北望沣渭
    北望沣渭
    2020-09-09

    云端是nodejs 10.15.3 环境,https://github.com/TheNorthMemory/wechatpay-axios-plugin 这个lib在10.15.0下做过测试,不仅是支付,已知开放出来的167个v3接口,均可正常跑转起来,可以尝试尝试。

    2020-09-09
    赞同
    回复 3
    • 老张
      老张
      2020-09-09
      真不错。之前我怎么没找到你这篇?卡在上传图片这里6个多小时。你们的源码能借签不少。可惜我这三天里,基本收付通都跑通了,目前只做了甲方要求的收付通的其中24个接口,等以后有需求了再研究。
      2020-09-09
      回复
    • 北望沣渭
      北望沣渭
      发表于移动端
      2020-09-09回复老张
      https://developers.weixin.qq.com/community/develop/article/doc/000cc48a370008b8ff9a64a3c51013 老帖了…
      2020-09-09
      回复
    • 老张
      老张
      2020-09-09回复北望沣渭
      哈,搜到过,然后被坑人的TNWX吸引走了。不过无所谓了。都搞定了。再弱弱地问一下,你们的商业模式是什么样的?靠什么赚钱呢?
      2020-09-09
      回复
登录 后发表内容