前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >几行代码解决云开发微信支付

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

作者头像
许坏
发布2019-09-09 17:58:26
2.6K0
发布2019-09-09 17:58:26
举报
文章被收录于专栏:宅机吧宅机吧宅机吧

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

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

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();
}

注意安装依赖;

前端代码

//支付提交
      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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 宅机吧 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云函数
云函数(Serverless Cloud Function,SCF)是腾讯云为企业和开发者们提供的无服务器执行环境,帮助您在无需购买和管理服务器的情况下运行代码。您只需使用平台支持的语言编写核心代码并设置代码运行的条件,即可在腾讯云基础设施上弹性、安全地运行代码。云函数是实时文件处理和数据处理等场景下理想的计算平台。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档