纵有疾风起
人生不言弃

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

代码前提:只需要替换两个与自己相关的参数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.jianshu.com/p/f2198d500825

原著是一个有趣的人,若有侵权,请通知删除

未经允许不得转载:起风网 » 微信小程序云开发微信支付

分享到: 生成海报
avatar

评论 抢沙发

评论前必须登录!

立即登录   注册

切换注册

登录

忘记密码 ?

切换登录

注册

我们将发送一封验证邮件至你的邮箱, 请正确填写以完成账号注册和激活