开源低代码平台-Microi吾码-接口引擎实战:微信v3支付JSAPI下单
接口引擎与第三方平台对接无所不能,下一篇介绍对接微信支付回调(含签名验证)
·
Microi吾码-接口引擎实战:微信v3支付JSAPI下单
简介
接口引擎与第三方平台对接无所不能,下一篇介绍对接微信支付回调(含签名验证)
预览图
业务逻辑
- 参考微信支付官方文档:https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_5_1.shtml
- 必传:ProductId(商品Id,用于根据商品Id查询出 商品名称、商品价格)
- 新增订单信息,拿到订单编号(订单编号一般为【自动编号】控件,平台内置分布式锁保证唯一性)
- 写日志
- 生成微信需要的加密请求头
- 向微信发起请求
- 上一步成功后修改订单信息:回写统一下单结果
- 返回一些前端发起支付需要的值
接口引擎代码
//参数
var appid = V8.SysConfig.MiniProgramAppId;//小程序 appid
var mchid = V8.SysConfig.WeChatMchId;//商户Id
var serialNo = V8.SysConfig.CertSerialNo;//商户API证书序列号serial_no,用于声明所使用的证书
var privateKey = V8.SysConfig.WxPayPrivateKey;//私书私有key
var oepnId = 'ouVQI46Ckf_WzhYnjGIvtvzC2nwo';//V8.CurrentUser.MiniProgramOpenId;//'ouVQI46Ckf_WzhYnjGIvtvzC2nwo';//
var notify_url = 'https://api.microios.com/apiengine/wxpay-notify';//用户支付成功后回调地址,由接口引擎实现
var jsapiUrl = 'https://api.mch.weixin.qq.com/v3/pay/transactions/jsapi';//腾讯官方下单地址,固定url
var jsapiUrlSimple = '/v3/pay/transactions/jsapi';//腾讯官方下单地址,固定url
var currentUser = V8.CurrentUser;
//参数校验
if(!appid || !mchid || !serialNo || !privateKey){
V8.Result = { Code : 0, Msg : '支付配置有误!' }; return;
}
if(!oepnId){
V8.Result = { Code : 0, Msg : '未找到当前登录用户小程序oepnid,无法发起支付!' }; return;
}
//获取商品信息,根据商品Id查询出 商品名称、商品价格
if(!V8.Param.ProductId){
V8.Result = { Code : 0, Msg : '未传入商品Id' }; return;
}
var productResult = V8.FormEngine.GetFormData({
FormEngineKey : 'diy_vip_level',
Id : V8.Param.ProductId
});
if(productResult.Code != 1){
V8.Result = { Code : 0, Msg : '获取商品信息失败:' + productResult.Msg;}; return;
}
var productModel = productResult.Data;
var productName = productModel.Mingcheng;//商品名称。1-127位
var productPrice = parseInt(productModel.HuiyuanJG * 100);//商品价格,单位为分,必须整数int类型
//新增订单信息,拿到订单编号(订单编号一般为【自动编号】控件,平台内置分布式锁保证唯一性)
var orderResult = V8.FormEngine.AddFormData({
FormEngineKey : 'diy_vip_order',
_RowModel : {
DingdanBH : '',//订单编号,自动生成
ShangpinMC : productModel.Mingcheng,//商品名称
ShangpinID : productModel.Id,//商品Id
DingdanJE : productModel.HuiyuanJG,//订单金额
HuiyuanZH : currentUser.Account,
HuiyuanMC : currentUser.Name,
HuiyuanID : currentUser.Id,
ShifouYZF : 0,//是否已支付
}
});
if(orderResult.Code != 1){
V8.Result = { Code : 0, Msg : '生成订单信息失败:' + orderResult.Msg;}; return;
}
//订单编号。6-32位。需要是字符串。
var orderNo = orderResult.Data.DingdanBH;//new Date().getTime().toString();
var payParam = {
"mchid": mchid,//支付商户Id
"out_trade_no": orderNo,//商户订单号
"appid": appid,//小程序 appid
"description": productName,//商品描述
"notify_url": notify_url,//回调地址,由接口引擎实现
"amount": {
"total": productPrice,//订单总金额,单位为分。
"currency": "CNY"//固定值
},
"payer": {
"openid": oepnId//用户的openid
}
};
//写日志
var addLogResult = V8.FormEngine.AddFormData({
FormEngineKey : 'diy_important_log',
_RowModel : {
RizhiMC : '微信v3支付JSAPI下单',
RizhiLB : '下单参数',
RizhiNR : JSON.stringify(payParam),
GuanlianID : orderNo,//orderResult.Data.Id
}
});
V8.Result = `mchid:${mchid}, serialNo:${serialNo}, privateKey:${privateKey}, jsapiUrlSimple:${jsapiUrlSimple}, payParam:${JSON.stringify(payParam)}`;
return;
//生成微信需要的加密请求头
var headers = {
Authorization : V8.Method.GetWeChatAuthorization(mchid, serialNo, privateKey, jsapiUrlSimple, JSON.stringify(payParam));
};
//向微信发起请求
var httpResult = V8.http.Post({
Url : jsapiUrl,
//注意:接口引擎目前有个暂未解决的bug:
//参数传入int类型的值,接口引擎会序列化成浮点类型,这将导致微信参数验证不通过
//所以使用PostParamString参数,提前序列化好。
//PostParam: payParam,
PostParamString : JSON.stringify(payParam),
ParamType : 'JSON',//这里的'json'不区分大小写
Headers : headers
});
var httpResultObj = JSON.parse(httpResult);
//修改订单信息:回写统一下单结果
V8.FormEngine.UptFormData({
FormEngineKey : 'diy_vip_order',
Id : orderResult.Data.Id,
_RowModel : {
TongyiXDJG : httpResult,
TongyiXDCG : httpResultObj.prepay_id ? 1 : 0
}
});
//如果不存在prepay_id,以DosResult标准格式返回错误结果到前端
if(!httpResultObj.prepay_id){
V8.Result = { Code : 0, Data : httpResultObj, Msg : httpResultObj.message };
}else{
//返回一些前端发起支付需要的值
//签名,使用字段appId、timeStamp、nonceStr、package计算得出的签名值
httpResultObj.appid = appid;//小程序appid
httpResultObj.timeStamp = V8.Method.GetTimestamp().toString();//秒时间戳
httpResultObj.nonceStr = System.IO.Path.GetRandomFileName();//随机字符串
httpResultObj.package = 'prepay_id=' + httpResultObj.prepay_id;//prepay_id
//微信签名
httpResultObj.paySign = V8.Method.GetWeChatSign(privateKey, [appid, httpResultObj.timeStamp, httpResultObj.nonceStr, httpResultObj.package]);
V8.Result = { Code : 1, Data : httpResultObj};//这里不用返回Data
}
Microi吾码-系列文档
- 平台介绍:https://microi.blog.csdn.net/article/details/143414349
- 一键安装使用:https://microi.blog.csdn.net/article/details/143832680
- 快速开始使用:https://microi.blog.csdn.net/article/details/143607068
- 源码本地运行-后端:https://microi.blog.csdn.net/article/details/143567676
- 源码本地运行-前端:https://microi.blog.csdn.net/article/details/143581687
- Docker部署:https://microi.blog.csdn.net/article/details/143576299
- 表单引擎:https://microi.blog.csdn.net/article/details/143671179
- 模块引擎:https://microi.blog.csdn.net/article/details/143775484
- 接口引擎:https://microi.blog.csdn.net/article/details/143968454
- 工作流引擎:https://microi.blog.csdn.net/article/details/143742635
- 界面引擎:https://microi.blog.csdn.net/article/details/143972924
- 打印引擎:https://microi.blog.csdn.net/article/details/143973593
- V8函数列表-前端:https://microi.blog.csdn.net/article/details/143623205
- V8函数列表-后端:https://microi.blog.csdn.net/article/details/143623433
- V8.FormEngine用法:https://microi.blog.csdn.net/article/details/143623519
- Where条件用法:https://microi.blog.csdn.net/article/details/143582519
- DosResult说明:https://microi.blog.csdn.net/article/details/143870540
- 分布式存储配置:https://microi.blog.csdn.net/article/details/143763937
- 自定义导出Excel:https://microi.blog.csdn.net/article/details/143619083
- 表单引擎-定制组件:https://microi.blog.csdn.net/article/details/143939702
- 表单控件数据源绑定配置:https://microi.blog.csdn.net/article/details/143767223
- 复制表单和模块到其它数据库:https://microi.blog.csdn.net/article/details/143950112
- 论传统定制开发与低代码开发的优缺点:https://microi.blog.csdn.net/article/details/143866006
- 开源版、个人版、企业版区别:https://microi.blog.csdn.net/article/details/143974752
- 成为合伙人:https://microi.blog.csdn.net/article/details/143974715
接口引擎实战-系列文档
- 接口引擎实战-发送第三方短信:https://microi.blog.csdn.net/article/details/143990546
- 接口引擎实战-发送阿里云短信:https://microi.blog.csdn.net/article/details/143990603
- 接口引擎实战-微信小程序授权手机号登录:https://microi.blog.csdn.net/article/details/144106817
更多推荐
已为社区贡献11条内容
所有评论(0)