几行代码解决云开发微信支付

2019-09-09 17:58:26 浏览数 (1)

新版二手书小程序的进程每天都在更新了,中午抽时间赶到了支付阶段,第一次使用云开发进行小程序支付,体验了下,真的方便。

首先,创建云函数pay,其内容如下:

代码语言:javascript复制
const config = {
      appid: 'wx111111111111111', //小程序Appid
      envName: 'zf-shcud', // 小程序云开发环境ID
      mchid: '1511111111', //商户号
      partnerKey: '11111111111111111111111111111111', //此处填商户密钥
      notify_url: 'https://mp.weixin.qq.com', //支付回调网址,这里可以随意填一个网址
      spbill_create_ip: '127.0.0.1'
};

const cloud = require('wx-server-sdk');
cloud.init({
env: config.envName
})
const db = cloud.database();
const TcbRouter = require('tcb-router'); //云函数路由
const rq = require('request');
const tenpay = require('tenpay');//支付核心模块

exports.main = async (event, context) => {
const app = new TcbRouter({
            event
      });
//支付回调
      app.router('pay', async (ctx) => {
const wxContext = cloud.getWXContext();
// 在云函数参数中,提取商品 ID
const goodId = event.goodId;
// 根据商品的数据库_id将其它数据提取出来
let goods = await db.collection('publish').doc(goodId).get();
// 在云函数中提取数据,包括名称、价格才更合理安全,
// 因为从端里传过来的商品数据都是不可靠的
let good=goods.data;
const curTime = Date.now();
const api = tenpay.init(config)
let result = await api.getPayParams({
//商户订单号,我这里是定义的book 商品发布时间 当前时间戳
//微信这里限制订单号一次性不能重复,只需要唯一即可
                  out_trade_no: 'book' good.creat   ''   curTime,     
body: good.bookinfo.title,       //商品名称,我设置的书名
                  total_fee: parseInt(good.price),     //金额,注意是数字,不是字符串
                 openid: wxContext.OPENID //***用户的openid
            });
            ctx.body = result;//返回前端结果
      });
      //修改订单状态,以下是支付成功后的其余操作,与配置支付无关
      app.router('change', async (ctx) => {
try {
return await db.collection('publish').doc(event._id).update({
data: {
                              status:1 ////0在售;1买家已付款,但卖家未发货;2买家确认收获,交易完成;3、交易作废,退还买家钱款
                        }
                  })
            } catch (e) {
console.error(e)
            }
      });
return app.serve();
}

注意安装依赖;

前端代码

代码语言:javascript复制
//支付提交
      paypost() {
let that = this;
            wx.showLoading({
title: '正在下单',
            });
// 利用云开发接口,调用云函数发起订单
            wx.cloud.callFunction({
name: 'pay',
data: {
$url: "pay", //云函数路由参数
                        goodId: that.data.publishinfo._id
                  },
success: res => {
                        wx.hideLoading();
                        that.pay(res.result)
                  },
                  fail(e) {
                        wx.hideLoading();
                        wx.showToast({
title: '支付失败,请及时反馈或稍后再试',
icon:'none'
                        })
                  }
            });
      },
//实现小程序支付
      pay(payData) {
let that = this;
//官方标准的支付方法
            wx.requestPayment({
timeStamp: payData.timeStamp,
nonceStr: payData.nonceStr,
                  package: payData.package, 
signType: 'MD5',
                  paySign: payData.paySign,
                  success(res) {
console.log("支付成功", res)
                  },
            })
      }

这就是完整的云开发支付了,完整的dome,请敬请期待二手书小程序的上线,到时我会上传到我的Github,地址:

https://github.com/xuhuai66

0 人点赞