首页 > 其他分享 >开源低代码平台-Microi吾码-接口引擎实战:微信v3支付JSAPI下单

开源低代码平台-Microi吾码-接口引擎实战:微信v3支付JSAPI下单

时间:2024-12-01 13:03:22浏览次数:10  
标签:microi 微信 blog v3 csdn https article net Microi

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吾码-系列文档

接口引擎实战-系列文档

标签:microi,微信,blog,v3,csdn,https,article,net,Microi
From: https://blog.csdn.net/qq973702/article/details/144156119

相关文章

  • 微信计数器|微信微信计数器软件|微信计数器不封号|最新微信计数器
    1.精准计数,自动重复,可同时统计多个微信,互不影响2.带远程网页分享,5秒自动刷新,准确计数分秒不差3.后台分享支持分组类别,单独分享链接4.支持任意版本微信,不在受微信版本束缚5.支持客户子后台,大客户更方便管理账号6.非HOOK,非外挂,非注入,不封号,独家技术 ★★可根据需求来......
  • 【微信小程序毕业设计】失物招领小程序的设计与实现
    概述:某211院校在校计算机导师,让我成为您的校外毕业指导老师。为您的毕业之旅保驾护航,专业为大家做好毕业选题,课外辅导等工作。文章末尾处有资料的获取方式。点击获取即可。技术描述:后端实现-使用node.js作为开发语言,koa2作为接口开发框架数据库-mysql管理端-vue2.0编写管......
  • 微信空间告急,3个有效清理苹果手机微信空间小妙招
    在日常生活和工作中,微信已成为我们不可或缺的社交工具。然而,随着使用时间的增长,微信占用的空间也越来越多,尤其是苹果手机用户,可能经常会遇到“微信空间不足”的提示。那么,如何有效清理微信占用的空间,让手机腾出大量存储空间呢?接下来,本文将为你提供一套全面且实用的清理方案。......
  • 微信消息塞爆?自动回复功能让你轻松应对!
    在商业竞争日趋白热化的今天,客户信息成百上千纷至沓来的时候。我们常常会显得应接不暇。这时,一款多微管理系统的出现给我们带来了极大的便利。 首先,登录你的微信号。如果此时你拥有20甚至是30个微信号时,告诉你,这款系统它能支持同时登录多个账号,完全无需担心会受到数量的......
  • 09. 开源低代码平台-Microi吾码 - 动态打印引擎
    开源低代码平台-Microi吾码 ......
  • 【微信小程序】常见问题-尺寸单位转换
    在微信小程序开发中,尺寸单位的正确使用和转换是非常重要的,因为这直接影响到页面布局的美观性和用户体验。微信小程序推荐使用rpx作为尺寸单位,这是一种响应式的单位,可以根据屏幕宽度进行自适应。然而,在某些情况下,开发者可能需要在rpx、px、rem、vw等单位之间进行转换。以......
  • Y20030009基于Java+springboot+MySQL+uniapp框架的待办事项提醒微信小程序的设计与实
    待办事项提醒小程序1.摘要2.开发目的和意义3.系统功能设计4.系统界面截图5.源码获取1.摘要随着现代人的工作和生活压力越来越大,人们的精力和时间也越来越有限。在这样的情况下,很容易忘记一些很重要的行程,有时会导致严重的后果,如何处理好自己的待办事项,便成为了一个需......
  • node.js毕设基于微信小程序的图书推荐系统程序+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于图书推荐系统的研究,现有研究主要集中在网页端或者独立APP的开发上,专门针对微信小程序这一平台开发图书推荐系统的研究较少。在国内外,图书推荐系统多......
  • 基于微信小程序+SpringBoot的爱心服务平台设计和实现(源码+论文+部署)
    目录:目录:博主介绍: 完整视频演示:你应该选择我技术栈介绍:需求分析:系统各功能实现一览:1.注册2.登录部分代码参考: 项目功能分析: 项目论文:源码获取:博主介绍: ......
  • 微信公众号 生成带参数二维码
    //scene_id参数publicstringGetewmPic(stringscene_id){JavaScriptSerializerjs=newJavaScriptSerializer();//Redis获取tokenRedisHelperrds=newRedisHelper();stringaccess_token_......