收藏
回答

每天都问:统一下单unifiedOrder:fail source.on is not a ?

云函数:

const cloud = require('wx-server-sdk'); //初始化云函数
cloud.init({
  env: {
    database: 'zhatuche001-9ed94'//数据库操作的默认环境
    storage: 'zhatuche001-9ed94'//文件存储的默认环境
    functions: 'zhatuche001-9ed94'//调用其它云函数的默认环境
    traceUser: true//是否将来方用户记录在后台中
    //cloud: DYNAMIC_CURRENT_ENV//// API 调用都保持和云函数当前所在环境一致
  }
});
const db = cloud.database(); //获取数据库的引用 无参数,用默认环境
const _ = db.command
exports.main = async (event, context) =>{
  const wxContext = cloud.getWXContext()
  const OPENID=wxContext.OPENID
  const {
    DangHao,
    SJ_str32
  }=ShengCeng_DH_SJ()//获取单号和随机字符串
  //const JingEr=ShangPing[XuanZe[0]][XuanZe[1]].SuoDe.JiaGe//商品价格
  const JingEr=1//先订义下单金额为0.01元 
  //++++++++++++++++++++++++++调用统一下单接口 开始
  const res=await cloud.cloudPay.unifiedOrder({
    envId: 'ZhiFu'//结果通知回调云函数环境(必要)
    functionName: 'zhatuche001-9ed94'//结果通知回调云函数名(必要)
    subMchId: '1611281096'//子商户号(必要)
    //nonceStr: SJ_str32, //随机字符串(必要)
    nonceStr:'12345678901234567890123456789012',//先强行凑够32位
    body: '金币/钻石购买'//商品描述(必要)
    attach: '虚拟商品,不退不换'//附加数据(非必要)
    outTradeNo: DangHao, //商户订单号(必要)
    totalFee: JingEr, //总金额(必要)
    spbillCreateIp: '127.0.0.1'//终端IP(必要)
    tradeType: 'JSAPI'//交易类型(必要)
    openid: OPENID, //用户标识符(必要)
   })
   res.DangHao=DangHao;//单号
   res.JingEr=JingEr;//下单所选金额


   let payData=event.payDate//结果
   payData.DangHao=DangHao//单号
   payData.ZhiFuZhuangTai=false//支付状态 未支付
   payData.JingEr=JingEr//支付的金额
   payData.openId=OPENID//用户的openid
   payData.ShiJian=new Date()//创建时间
   payData.DingDang=res//订单


   //拦截处理 为保持数据库字段一至性
   if(res.returnCode == 'SUCCESS' && res.resultCode == 'SUCCESS'){
      //在云数据库中写入未支付的订单信息
      let FangHuiNeiRong=await db.collection('ZhiFu').add({
        data:PayData
      })
      //将该记录的_id携带 返回给用户端
      res._id=FangHuiNeiRong._id
      return res;
   }else{
     return res
   }
}
/**
 * 生成订单号和随机字符串
 * 返回单号和随32位随机字符串
 */
function ShengCeng_DH_SJ(){
  const str = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678'//****默认去掉了容易混淆的字符oOLl,9gq,Vv,Uu,I1
  let SJ_str32=''//32位随机字符串
  for(let i=0;i<32;i++){
    /**
     * charAt:返回字符串中第几个字符
     * Math.floor:对值进行下舍入
     * Math.random:返回0-1之间的随机数
     * 全文:
     */
    SJ_str32+=str.charAt(Math.floor(Math.random()*str.length))
  }
  let DangHao=''//订单号
  let ShiJian=new Date().getTime()-8*60*60*1000
  for(let i=0;i<6;i++){//6位随机数,用于加在时间戳后面
    DangHao+=Math.floor(Math.random() * 10)
  }
  DangHao='COP'+ShiJian+DangHao
  return{
    DangHao,
    SJ_str32
  }
}

提示错误:

Error: cloud.callFunction:fail -404011 cloud function execution error. 云函数执行错误

云端堆栈信息(error stack)(requestId b6953493-d87f-11eb-a5d4-525400b8ee5a, callid 1624932856834-0.046614243876275774):

Error: cloudPay.unifiedOrder:fail -501001 resource system error. source.on is not a function

    at toSDKError (:42847/var/user/node_modules/wx-server-sdk/index.js:8088)

    at Object.returnAsFinalCloudSDKError (:42847/var/user/node_modules/wx-server-sdk/index.js:8059)

    at callCloudPayAPI (:42847/var/user/node_modules/wx-server-sdk/index.js:941)

求问:source.on是什么东西?怎么解决

package.json:

{
  "name""ZhiFu",
  "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"
  }
}
回答关注问题邀请回答
收藏

1 个回答

  • 疯狂的小辣椒
    疯狂的小辣椒
    2021-06-29

    你好,麻烦补充下requestID

    2021-06-29
    有用
    回复 5
    • momo
      momo
      2021-06-29
      RequestId:b6953493-d87f-11eb-a5d4-525400b8ee5a
      2021-06-29
      回复
    • 疯狂的小辣椒
      疯狂的小辣椒
      2021-06-29回复momo
      收到,我们先定位下
      2021-06-29
      回复
    • momo
      momo
      2021-06-29回复疯狂的小辣椒
      ???还没找到?
      2021-06-29
      回复
    • momo
      momo
      2021-06-29回复疯狂的小辣椒
      看来又要重发一贴了
      2021-06-29
      回复
    • 疯狂的小辣椒
      疯狂的小辣椒
      2021-07-01回复momo
      env直接传字符串就可以了
      2021-07-01
      回复
登录 后发表内容