美文网首页
微信小程序云开发微信支付

微信小程序云开发微信支付

作者: zhyzhyzz | 来源:发表于2020-03-04 15:19 被阅读0次

    代码前提:只需要替换两个与自己相关的参数key和mch_id

    1、小程序开通微信支付成功,去公众平台(https://mp.weixin.qq.com/);
    成功后可以知道自己的mch_id,即商户号。
    2、去这里:商户平台(https://pay.weixin.qq.com/),获取key = API密钥
    图片地址:[https://mmbiz.qlogo.cn/mmbiz_png/UDa9R1yl9UZoyY753HG2kIgkLluHnCVBJLjUAyjbric01Wr142fcGRzUu5yUibyhEgTIZt0wXBtBDVhUQSZYcETw/0?]
    

    小程序端:

     testWxCloudPay: function () {
        wx.cloud.callFunction({
          name: 'getPay',
          // data: {body:"body",attach:"attach",total_fee:1}, // 可传入相关参数。
          success: res => {
            console.log(res.result)
            if (!res.result.appId) return
            wx.requestPayment({
              ...res.result,
              success: res => {
                console.log(res)
              }
            })
          }
        })
      }
    

    云函数getPay:

    const key = "ABC...XYZ"//换成你的商户key,32位
    const mch_id = "1413092000"//换成你的商户号
    //以下全部照抄即可
    const cloud = require('wx-server-sdk')
    const rp = require('request-promise')
    const crypto = require('crypto')
    cloud.init()
    function getSign(args) {
      let sa = []
      for (let k in args) sa.push(k + '=' + args[k])
      sa.push('key=' + key)
      return crypto.createHash('md5').update(sa.join('&'), 'utf8').digest('hex').toUpperCase()
    }
    function getXml(args) {
      let sa = []
      for (let k in args) sa.push('<' + k + '>' + args[k] + '')
      sa.push('' + getSign(args) + '')
      return '' + sa.join('') + ''
    }
    exports.main = async (event, context) => {
      const wxContext = cloud.getWXContext()
      const appId = appid = wxContext.APPID
      const openid = wxContext.OPENID
      const attach = 'attach' //可从event.attach传入
      const body = 'body' //可从event.body传入
      const total_fee = 1 //可从event.total_fee传入或改成自己的金额。
      const notify_url = "https://mysite.com/notify" //支付成功后的回调地址,没有的话可任意写。
      const spbill_create_ip = "118.89.40.200" //任意写
      const nonceStr = nonce_str = Math.random().toString(36).substr(2, 15)
      const timeStamp = parseInt(Date.now() / 1000) + ''
      const out_trade_no = "otn" + nonce_str + timeStamp //订单号,可用于订单查询,可自己写命名算法。
      const trade_type = "JSAPI"
      const xmlArgs = { appid, attach, body, mch_id, nonce_str, notify_url, openid, out_trade_no, spbill_create_ip, total_fee, trade_type }
      let xml = (await rp({ url: "https://api.mch.weixin.qq.com/pay/unifiedorder", method: 'POST', body: getXml(xmlArgs) })).toString("utf-8")
      if (xml.indexOf('prepay_id') < 0) return xml //如果发生错误,不含prepay_id,传回xml
      let prepay_id = xml.split("")[0]
      let payArgs = { appId, nonceStr, package: ('prepay_id=' + prepay_id), signType: 'MD5', timeStamp }
      return { ...payArgs, paySign: getSign(payArgs) }
    }
    

    packge.json:

    {
      "name": "getPay",
      "version": "1.0.0",
      "description": "",
      "main": "index.js",
      "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
      },
      "author": "zfe",
      "license": "ISC",
      "dependencies": {
        "wx-server-sdk": "latest",
        "crypto": "^1.0.1",
        "request-promise": "^4.2.2"
      }
    }
    

    相关文章

      网友评论

          本文标题:微信小程序云开发微信支付

          本文链接:https://www.haomeiwen.com/subject/prnvlhtx.html