微信支付用云函数实现notify_url
发布于 4 年前 作者 nayao 3529 次浏览 来自 分享

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

步骤如下:

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

打开小程序开发工具;

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的全部功能。

回到顶部