小程序
小游戏
企业微信
微信支付
扫描小程序码分享
企业付款到零钱功能提供由商户付款至用户微信零钱的能力
https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_1
云开发可以做 企业付款可以到零钱吗?
6 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
云函数,付款是V2版本接口
common.js const 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.js const 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 } }
实现功能是没问题的,至于安全性、性能效率语法什么的,还需要自己完善,仅供参考
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
可以啊
可以的
我之前做完一直报错,后来社区咨询发现是公网IP的问题,云开发需要付费才能获取到固定到IP
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
云函数,付款是V2版本接口
common.js const 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.js const 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 } }
实现功能是没问题的,至于安全性、性能效率语法什么的,还需要自己完善,仅供参考
可以啊
https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_1
可以的
我之前做完一直报错,后来社区咨询发现是公网IP的问题,云开发需要付费才能获取到固定到IP