评论

微信支付用云函数实现notify_url

没有服务器,通过云函数实现微信支付异步通知。

没有自己的服务器,怎么用云函数来接收微信支付成功异步通知呢。

步骤如下:

(因论坛审核机制,就不上图片了,否则可能触发人工审核)

打开小程序开发工具;


1、云控制台中,点击:设置--环境设置--充值与账单;

此时会跳到腾讯云;


2、点击:账号中心--访问管理;

此时会跳到腾讯云控制台;


3、在左上角点击:云产品--找到:云开发CloudBase;

此时出现小程序的云环境列表


4、选择某个云环境;

5、点击:访问服务;


6、新建一个HTTP访问服务;将一个公网域名URL与一个云函数关联;

比如云函数名:pay_notify与https://<http访问服务的默认域名>/pay_notify关联。


7、在统一下单里,将notify_url设为:https://<http访问服务的默认域名或自定义域名>/pay_notify


此时,可以在pay_notify中处理来自微信支付的异步通知了;

那这个云函数的入口参数是什么样的呢?接口文档:

https://cloud.tencent.com/document/product/876/41776


8、固定IP的配置:可以在此处腾讯云中配置,也可以在小程序开发工具的云控制台配置:某云函数--配置--高级设置--固定IP。


9、pay_notify的代码实例:以微信支付V2为例。

const cloud = require('wx-server-sdk')
const xml2js = require('xml2js')
const crypto = require('crypto')
const config = require('./config.js')
const key = config.key
cloud.init({env: cloud.DYNAMIC_CURRENT_ENV})
const db = cloud.database()
const _ = db.command
const col = db.collection('payments')


exports.main = async event => {
  let xml = Buffer.from(event.body, 'base64').toString()
  let payment = await parseXML(xml)
  if(signVerify(payment)){}else return 'denied'
  await onPayment(payment) //业务处理
  return ``
}


至此,不用服务器,通过云函数,就实现了微信支付notify_url的全部功能。

最后一次编辑于  2021-04-28  
点赞 7
收藏
评论

1 个评论

  • Ray
    Ray
    2023-06-25
    const config = require('./config.js')这个里面需要修改吗?
    
    
    2023-06-25
    赞同
    回复 4
    • 跨商通
      跨商通
      2023-06-26
      这里放的是自己的东西,验签用的证书。
      2023-06-26
      回复
    • Ray
      Ray
      2023-06-27回复跨商通
      弄不好  {笑哭/}
      2023-06-27
      回复
    • 跨商通
      跨商通
      2023-06-27回复Ray
      可以跳过验签这步的啊。另外,也没必要研究V2的东西了,去研究V3吧。
      2023-06-27
      回复
    • Ray
      Ray
      2023-06-27回复跨商通
      我现在弄的多端Donut,用的云开发,只弄懂了V2怎么在云函数调用
      2023-06-27
      回复
登录 后发表内容