他们在做小流程缴付有关的合作开发时,协进会碰到那些痛点。小流程初始化QQ缴付时,要要有他们的伺服器,有他们的登记搜索引擎,有他们的前台合作开发。这引致他们做小流程缴付时的生产成本非常大。此栏来教他们怎样采用小流程云合作开发同时实现小流程缴付机能的合作开发。不必构筑他们的伺服器,不必有他们的登记搜索引擎。只须要里韦县的采用小流程云合作开发。

狡蛛属先看设计图:

借助于小流程云合作开发同时实现小流程缴付机能(含源代码)插图

此栏习题

1,云合作开发的布署和采用

2,缴付有关的云表达式合作开发

3,货品条目

4,订货条目

5,QQ缴付与缴付获得成功反弹

缴付获得成功给使用者推送推送最新消息的机能会在前面传授。

上面来教他们怎样借助于云合作开发采用小流程缴付机能。

缴付所须要加进的实用性重要信息

1,小流程appid

2,云合作开发自然环境id

3,QQ商家号

4,商家莫尔穆瓦龙县

一,预备组织工作

1,早已提出申请小流程,以获取小流程 AppID 和 Secret 在小流程管理前台中,【增设】 →【合作开发增设】 下能以获取QQ小流程 AppID 和 Secret。

借助于小流程云合作开发同时实现小流程缴付机能(含源代码)插图1

2,QQ缴付商家号,以获取商家号和商家密钥在QQ缴付商家管理平台中,【账户中心】→【商家重要信息】 下能以获取QQ缴付商家号。

借助于小流程云合作开发同时实现小流程缴付机能(含源代码)插图2

在【账户中心】 ‒> 【API安全】 下能增设商家密钥。

借助于小流程云合作开发同时实现小流程缴付机能(含源代码)插图3

这里特殊说明下,个人小流程是没有办法采用QQ缴付的。所以如果想采用QQ缴付机能,要是非个人账号(当然个人能办个体户工商执照来注册非个人小流程账号)3,QQ合作开发者 IDEhttps://developers.weixin.qq.com/miniprogram/dev/devtools/download.html

4,开通小流程云合作开发机能:https://edu.csdn.net/course/play/9604/204526

二,货品条目的同时实现

设计图如下,由于此栏重点是缴付的同时实现,所以这里只简单贴出关键代码。

借助于小流程云合作开发同时实现小流程缴付机能(含源代码)插图4

wxml布局如下:

借助于小流程云合作开发同时实现小流程缴付机能(含源代码)插图5 货品: {{item.name}} 价格: {{item.price / 100}} 元 下单

他们所须要做的是借助于云合作开发以获取云数据库里的货品重要信息,然后展示到货品条目,关于云合作开发以获取货品条目并展示此栏不做传授(感兴趣的同学能翻看我的历史博客,有写过的)

借助于小流程云合作开发同时实现小流程缴付机能(含源代码)插图6

三,缴付云表达式的创建

首先看下他们缴付云表达式都包含那些内容

借助于小流程云合作开发同时实现小流程缴付机能(含源代码)插图7

简单先传授下每个的用处

config下的index.js是做缴付实用性用的,主要实用性缴付有关的账号重要信息

lib是用的第三方的缴付库,这里不做传授。

重点传授的是云表达式入口 index.js上面来教他们怎样去实用性

1,实用性config下的index.js,

这一步所须要做的是把小流程appid,云合作开发自然环境ID,商家id,商家莫尔穆瓦龙县。填进去。

借助于小流程云合作开发同时实现小流程缴付机能(含源代码)插图8

2,实用性入口云表达式

借助于小流程云合作开发同时实现小流程缴付机能(含源代码)插图9

详细代码如下,代码里注释很清除了,这里不再做单独传授:

const cloud = require(wx-server-sdk) cloud.init() const app = require(tcb-admin-node); const pay = require(./lib/pay); const { mpAppId, KEY } = require(./config/index); const { WXPayConstants, WXPayUtil } = require(wx-js-utils); const Res = require(./lib/res); const ip = require(ip); /** * * @param {obj} event * @param {string} event.type 机能类型 * @param {} userInfo.openId 使用者的openid */ exports.main = async function(event, context) { const { type, data, userInfo } = event; const wxContext = cloud.getWXContext() const openid = userInfo.openId; app.init(); const db = app.database(); const goodCollection = db.collection(goods); const orderCollection = db.collection(order); // 订货文档的status 0 未缴付 1 已缴付 2 已关闭 switch (type) { // [在此处放置 unifiedorder 的有关代码] case unifiedorder: { // 查询该货品 ID 是否存在于数据库中,并将数据提取出来 const goodId = data.goodId let goods = await goodCollection.doc(goodId).get(); if (!goods.data.length) { return new Res({ code: 1, message: 找不到货品 }); } // 在云表达式中提取数据,包括名称、价格才更合理安全, // 因为从端里传过来的货品数据都是不可靠的 let good = goods.data[0]; // 拼凑QQ缴付统一下单的参数 const curTime = Date.now(); const tradeNo = `${goodId}-${curTime}`; const body = good.name; const spbill_create_ip = ip.address() || 127.0.0.1; // 云表达式暂不缴付 http 触发器,因此这里反弹 notify_url 能先随便填。 const notify_url = http://www.qq.com; //127.0.0.1; const total_fee = good.price; const time_stamp = + Math.ceil(Date.now() / 1000); const out_trade_no = `${tradeNo}`; const sign_type = WXPayConstants.SIGN_TYPE_MD5; let orderParam = { body, spbill_create_ip, notify_url, out_trade_no, total_fee, openid, trade_type: JSAPI, timeStamp: time_stamp, }; // 初始化 wx-js-utils 中的统一下单方法 const { return_code, …restData } = await pay.unifiedOrder(orderParam); let order_id = null; if (return_code === SUCCESS && restData.result_code === SUCCESS) { const { prepay_id, nonce_str } = restData; // QQ小流程缴付要单独进地签名,并返回给小流程端 const sign = WXPayUtil.generateSignature({ appId: mpAppId, nonceStr: nonce_str, package: `prepay_id=${prepay_id}`, signType: MD5, timeStamp: time_stamp }, KEY); let orderData = { out_trade_no, time_stamp, nonce_str, sign, sign_type, body, total_fee, prepay_id, sign, status: 0, // 订货文档的status 0 未缴付 1 已缴付 2 已关闭 _openid: openid, }; let order = await orderCollection.add(orderData); order_id = order.id; } return new Res({ code: return_code === SUCCESS ? 0 : 1, data: { out_trade_no, time_stamp, order_id, …restData } }); } // [在此处放置 payorder 的有关代码] case payorder: { // 从端里出来有关的订货相信 const { out_trade_no, prepay_id, body, total_fee } = data; // 到QQ缴付侧查询是否存在该订货,并查询订货状态,看看是否早已缴付获得成功了。 const { return_code, …restData } = await pay.orderQuery({ out_trade_no }); // 若订货存在并缴付获得成功,则开始处理缴付 if (restData.trade_state === SUCCESS) { let result = await orderCollection .where({ out_trade_no }) .update({ status: 1, trade_state: restData.trade_state, trade_state_desc: restData.trade_state_desc }); let curDate = new Date(); let time = `${curDate.getFullYear()}-${curDate.getMonth() + 1}-${curDate.getDate()} ${curDate.getHours()}:${curDate.getMinutes()}:${curDate.getSeconds()}`; } return new Res({ code: return_code === SUCCESS ? 0 : 1, data: restData }); } case orderquery: { const { transaction_id, out_trade_no } = data; // 查询订货 const { data: dbData } = await orderCollection .where({ out_trade_no }) .get(); const { return_code, …restData } = await pay.orderQuery({ transaction_id, out_trade_no }); return new Res({ code: return_code === SUCCESS ? 0 : 1, data: { …restData, …dbData[0] } }); } case closeorder: { // 关闭订货 const { out_trade_no } = data; const { return_code, …restData } = await pay.closeOrder({ out_trade_no }); if (return_code === SUCCESS && restData.result_code === SUCCESS) { await orderCollection .where({ out_trade_no }) .update({ status: 2, trade_state: CLOSED, trade_state_desc: 订货已关闭 }); } return new Res({ code: return_code === SUCCESS ? 0 : 1, data: restData }); } } }

其实他们缴付的关键机能都在上面那些代码里面了。

借助于小流程云合作开发同时实现小流程缴付机能(含源代码)插图10

再来看下,缴付的有关流程截图

借助于小流程云合作开发同时实现小流程缴付机能(含源代码)插图11

上图涉及到了他们的订货条目,缴付状态,缴付获得成功后的反弹。

先讲到这里,前面会继续给他们传授缴付的其他机能。比如缴付获得成功后的最新消息推送,也是能借助于云合作开发同时实现的。

借助于小流程云合作开发同时实现小流程缴付机能(含源代码)插图12
专栏
10小时零基础入门小流程合作开发
作者:编程小石头
29.9币
5人已购
查看

由于源代码里涉及到一些私密重要信息,这里不单独贴出源代码下载链接了,他们感兴趣的话,能私信我,或者在底部留言

作者 nasiapp

在线客服
官方客服
我们将24小时内回复。
12:01
您好,有任何疑问请与我们联系!

选择聊天工具: