收藏
回答

云开发可以做 企业付款可以到零钱吗?

企业付款到零钱功能提供由商户付款至用户微信零钱的能力

https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_1


云开发可以做 企业付款可以到零钱吗?

最后一次编辑于  2020-08-07
回答关注问题邀请回答
收藏

6 个回答

  • 亮荣齐
    亮荣齐
    2020-08-07

    云函数,付款是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
      }
    }
    


    实现功能是没问题的,至于安全性、性能效率语法什么的,还需要自己完善,仅供参考

    2020-08-07
    有用 4
    回复 2
    • 小肥羊🍊
      小肥羊🍊
      2020-08-07
      非常感谢这份代码,我近期跟进下,采用这个代码
      2020-08-07
      回复
    • 2021-04-21
      您好,云开发企业付款给个人,本机IP地址已经在微信商户平台添加。提示:此IP地址不允许调用接口,如有需要请登录微信支付商户平台更改配置。怎么处理呢?
      2021-04-21
      回复
  • 八九
    八九
    2020-08-07

    可以啊

    2020-08-07
    有用 2
    回复
  • 晓易
    晓易
    发表于移动端
    2020-08-07
    可以的。调用api就行了,云开发不要局限于别人封装好了哪些接口和能力。
    2020-08-07
    有用 1
    回复
  • 小肥羊🍊
    小肥羊🍊
    2020-08-07

    https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_1

    2020-08-07
    有用 1
    回复 2
    • Ableson
      Ableson
      2021-05-25
      您好,我复制上面的代码,直接创建文件,但是云函数调用的时候总是报错,找不到md5模块,请问怎么解决啊
      2021-05-25
      回复
    • Ableson
      Ableson
      2021-05-25
      云函数调用apiV2需要配置什么环境吗?
      2021-05-25
      回复
  • 刘泽中
    刘泽中
    2022-04-14

    可以的

    2022-04-14
    有用
    回复
  • Qiu (吉²)
    Qiu (吉²)
    2021-04-22

    我之前做完一直报错,后来社区咨询发现是公网IP的问题,云开发需要付费才能获取到固定到IP

    2021-04-22
    有用
    回复
登录 后发表内容
问题标签