评论

全云开发V3支付电商收付通,第二天,上传图片,此处慎用官方文档

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

不得不喷一下V3支付,上传图片环节,官方的文档太坑人了,没有它还好,照着它做,足足卡了我 6个多小时,全耗在body的拼接上了。

此处建议大家慎用官方的拼接方式,因为完全象撞大运一样,还不一定能拼接成功。我也是在放弃折腾后,不断攻略才找到了简单方法,如下所示:

官方文档:

https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/tool/chapter3_1.shtml

最后还是按照自己喜欢的方式实现了,用的是request-promise的formData,后台基于nodejs的可以简单参考,轻轻松松通过了。

代码如下:

//上传图片,获得media_id
async function merchant_media_upload(event) {
  let res = await cloud.downloadFile({ fileID: event.fileID })
  let filebuffer = res.fileContent
  let filename = event.filename
  let sha256 = crypto.createHash('sha256').update(filebuffer).digest('hex')
  let method = 'POST'
  let url = '/v3/merchant/media/upload'
  let jsonStr = JSON.stringify({ filename, sha256 })
  let headers = getHeaders(method, url, jsonStr)
  headers['Content-Type'] = `multipart/form-data;boundary=boundary`
  let formData = {
    'meta': jsonStr,
    'file': {
      value: filebuffer,
      options: {
        filename,
        contentType: 'image/jpg'
      }
    }
  }
  return JSON.parse(await rp({ method, uri: config.host + url, headers, formData }))
}

最后一次编辑于  09-11  
点赞 0
收藏
评论

3 个评论

  • 守望
    守望
    09-15

    请问可以将getHeaders的内容贴一下吗?


    09-15
    赞同
    回复
  • 守望
    守望
    09-15

    这个应该是从下载图片吧,如果是本地文件的话该如何改造呢?谢谢🙏

    09-15
    赞同
    回复
  • 北望沣渭
    北望沣渭
    09-11

    能公布出来的文档都经过好几遍审查了,平心而论,这锅绝对不是文档工程狮的😄

    09-11
    赞同
    回复 4
    • 老张
      老张
      09-11
      好吧,如果这只是我的个人现象,其他人都是轻轻松松地拼接成功的话,那只能怪本人水平有限;如果大家大概率都是卡在这里不停的拼接试错的话,那你这句就误导别人走向弯路了。我是实话非喷,V3的其他接口都很容易过,就这个拼接的接口太容易错,如果有我上面的这段代码,谁还会去拼body呢?官方加上这种DEMO代码有何难?
      09-11
      回复
    • 北望沣渭
      北望沣渭
      09-11回复老张
      加油,还有很多坑等你踩呢
      09-11
      回复
    • 老张
      老张
      09-11回复北望沣渭
      没有了。昨天都全部干完了,收付通基本都跑通了,再出错,就是业务参数踩坑了。
      09-11
      回复
    • 北望沣渭
      北望沣渭
      09-11回复老张
      厉害;刚又看了一眼,建议formData:meta把contentType也给上,强迫一下完整follow文档入参描述
      09-11
      回复
登录 后发表内容