https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_1
云开发可以做 企业付款可以到零钱吗?
云开发可以做 企业付款可以到零钱吗?Cloud development can be done, can corporate payments come to change?
云开发可以做 企业付款可以到零钱吗?https://pay.weixin.qq.com/wiki/doc/api/tools/mch_ pay.php?chapter=14_ Can cloud development do enterprise payment to change?
回答:
可以啊
原文出处:云开发可以做 企业付款可以到零钱吗?
云函数,付款是V2版本接口
common.jsconst rp = require('request-promise')const fs = require('fs')const md5=require('md5')const _xml=require('xml')const xml2js=require('xml2js')const parser=new xml2js.Parser()const config = { appid: 'xxxxxxxxxxxxxxx', //小程序wxid mchid: 'xxxxxxxxxxxx', //商户号 partnerKey: 'xxxxxxxxxxxxxxxxxxxx', //商户api密钥 serial_no: "xxxxxxxxxxxxxxxxxxxxxx", //商户证书序列号}var globalData={}/*v2版接口的统一请求方法 *@method *@param {Object} options 请求选项和参数 * options={ * uri:{String} 请求地址, * type:{String} 请求方式 GET POST..., * body:{Object} (可选)请求参数集,POST请求需要同时传递本项, * cert:{Boolean} (可选)是否需要证书,不填或false为不需要 * } */async function _request(options){ //调用接口 var datas=[] for(let d in options.body){ datas.push( {[d]:options.body[d]} ) } datas.push({sign:_sign(options.body)}) var cert=options.cert ? { pfx:fs.readFileSync(__dirname+'/apiclient_cert.p12'), passphrase:config.mchid } : {} var call = await rp({ uri: 'https://api.mch.weixin.qq.com/'+options.uri, method: options.method, body: _xml({xml:datas}), ...cert }) parser.parseString(call,function(err,res){ result=res.xml for(let r in result){ result[r]=result[r][0] } }) return result}/*获取随机字符串 *@method *@return {String} 随机字符串 */function _randomStr(){ return (new Date().getTime() + '_' + Math.random()).toString().slice(0,30)}/*获取签名 *@method *@param {Object} body 包含接口请求参数的对象 *@return {String} 签名计算结果*/function _sign(body) { let body_arr = [] for (let b in body){ if(body[b].toString().length > 0){ body_arr.push(b + '=' + body[b]) } } body_arr.push('key=' + config.partnerKey) return md5(body_arr.join('&')).toUpperCase()}module.exports = { config, globalData, _request, _randomStr}
CompanyPay.jsconst common=require('./common.js')/*企业付款接口 * *@Object CompanyPay*/const CompanyPay={ /*企业付款到零钱接口 *@method *@param {Object} option * { * amount:{Number}, 付款金额,单位(分) * desc:{String}, 付款备注 * openid:{String}, 接收方openid * } *@return {Object} 接口返回参数 */ tochange:async function(option){ return await common._request({ uri:'mmpaymkttransfers/promotion/transfers', method:'POST', body:{ amount:option.amount, check_name:'NO_CHECK',//或动态传入 desc:option.desc, mch_appid:common.config.appid, mchid:common.config.mchid, nonce_str:common._randomStr(), openid:option.openid, partner_trade_no:new Date().getTime() }, cert:true //企业付款需要证书 } } module.exports ={ ...CompanyPay }
//调用// 云函数入口文件const cloud = require('wx-server-sdk')cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV})// 云函数入口函数exports.main = async (event, context) => { switch(event.action){ case 'companypay_tochange': //企业付款到零钱 const CompanyPay=require('./ApiV2/CompanyPay') let companypay_action=event.action.replace('companypay_','') return CompanyPay[companypay_action](event.data) break default: return }}
实现功能是没问题的,至于安全性、性能效率语法什么的,还需要自己完善,仅供参考