// 云函数入口文件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" }}