// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init()
const app = require('tcb-admin-node');
const {
WXPay,
WXPayConstants,
WXPayUtil
} = require('wx-js-utils');
const ip = require('ip');
// 云函数入口函数
exports.main = async (event, context) => {
const wxContext = cloud.getWXContext()
const eventObj = {
event,
openid: wxContext.OPENID,
appid: wxContext.APPID,
unionid: wxContext.UNIONID,
mchId: '1498441482',
key: 'a4169ddae4baaf62f7a1c6f437429eaf',
}
const good = event.good
console.log('232', event)
const wxpays = new WXPay({
appId: eventObj.appid,
mchId: eventObj.mchId,
key: eventObj.key,
timeout: 10000,
signType: WXPayConstants.SIGN_TYPE_MD5,
useSandbox: false // 不使用沙箱环境
})
//支付环节
const openid = eventObj.openid
const curTime = Date.now();
const tradeNo = `${good.goodId}-${curTime}`;
const body = good.goodName;
const spbill_create_ip = ip.address() || '127.0.0.1';
// 云函数暂不支付 http 触发器,因此这里回调 notify_url 可以先随便填。
const notify_url = 'http://www.qq.com'; //'127.0.0.1';
const total_fee = Number(good.price);
const time_stamp = '' + Math.ceil(Date.now() / 1000);
const out_trade_no = `${tradeNo}`; //支付id 即订单id
const sign_type = WXPayConstants.SIGN_TYPE_MD5;
let orderParam = {
body,
spbill_create_ip,
notify_url,
out_trade_no,
total_fee,
openid,
trade_type: 'JSAPI',
timeStamp: time_stamp,
};
// 调用 wx-js-utils 中的统一下单方法
const {
return_code,
...payData
} = await wxpays.unifiedOrder(orderParam);
console.log('申请支付', out_trade_no )
let order_id = null;
if (return_code === 'SUCCESS' && payData.result_code === 'SUCCESS'){
const sign = WXPayUtil.generateSignature({
appId: eventObj.appid,
nonceStr: payData.nonce_str,
package: `prepay_id=${payData.prepay_id}`,
signType: 'MD5',
timeStamp: time_stamp
}, eventObj.key);
let payDatas = Object.assign(payData, { paySign: sign }, { timeStamp: time_stamp }, { out_trade_no: out_trade_no} )
console.log('支付签名', payDatas )
return payDatas
}
}
{
"name": "pay",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"wx-server-sdk": "latest",
"ip": "^1.1.5",
"request": "^2.87.0",
"tcb-admin-node": "^1.0.30",
"wx-js-utils": "0.0.4"
}
}