评论

云函数V3支付全家桶

之前一直用V2,终于把V3写成V2了

// 云函数入口文件
var cloud = require('wx-server-sdk')
    crypto = require('crypto')
    request = require('request')
    NodeRSA = require('node-rsa')//npm安装
    Form = require('./Form.class')
//Form 源自https://https://developers.weixin.qq.com/community/develop/article/doc/000c24f0390ff8b5d91b2489059413
//再次感谢社区北望大佬

cloud.init({
  env: 'xxxxxx'
})
const db = cloud.database()
// 云函数入口函数
exports.main = async (event, context) => {
  const rq = options =>
  new Promise((resolve, reject) => {...})
  // 基本参数
  var facilitator = event.facilitator=='undefined'?false:event.facilitator//facilitator=true时为服务商模式,false为直连模式
  console.log(`${facilitator?'服务商':'直连'}模式`)
  var mchid = facilitator?'160xxxxx92':'16xxxxx84'//服务商or直连商户号
  var appId = 'wx41xxxxxxfd6' //服务商和直连商户的appId
  var APIv3Key = facilitator?'xxxxxxxxx':'xxxxxxxxxx'//服务商or直连商户APIv3密钥
  var cert_Doc = facilitator?'certificates':'direct_certificates' //存在数据库的证书记录的_id
  var timeStamp = parseInt(Date.now()/1000)
  var nonce_str = Math.random().toString(36).substr(213)
  var url = 'https://api.mch.weixin.qq.com'+event.url
  //证书与私钥
  var certificates = (await db.collection('a-data').doc(cert_Doc).get()).data //存在数据库的证书
 
  var {serial_no} = certificates
  var {wx_serial_no} = certificates
  // 敏感信息加密
  var RSAoaep = (e)=>{...}
  // getHeaders
  const getHeaders = (method,meta)=>{...}
  // JSAPI支付
  if(event.url.indexOf('/transactions/jsapi')>-1){
    var {data} = event
    if(facilitator){//服务商模式
      data.sp_mchid = mchid
      data.sp_appid = appId
    }else{//直连模式
      data.mchid = mchid
      data.appid = appId
    }
        .....
    return {
      payment,//前端由此唤起支付
      errMsg:'下单成功',
      errCode:0
    }
  }
  // 申请退款
  if(event.url=='/v3/refund/domestic/refunds'){
      ....
  }
  // 特约商户进件:提交申请单
  if(event.url=='/v3/applyment4sub/applyment/'){
      ....
  }
  // 特约商户进件:图片上传接口
  if(event.url=='/v3/merchant/media/upload'){
      .....
  }
  // 特约商户进件:查询申请单状态
  if(event.url.indexOf('/v3/applyment4sub/applyment/business_code')>-1||event.url.indexOf('/v3/applyment4sub/applyment/applyment_id')>-1){
    ......
  }
  // 检测微信支付平台证书是否更新,该方法应定期且间隔不超过12小时执行一次,我是在更新公众号access_token的方法中调用,1h一次
  if(event.url=='/v3/certificates'){
         ......
  }
   /*更新平台证书方法(由于云函数nodejs版本过低,该方法请本地运行):
    if(event.url=='/v3/certificates'){
           ....
    } 
  */
}
 感兴趣请私信交流
最后一次编辑于  2021-08-28  
点赞 3
收藏
评论

3 个评论

登录 后发表内容