简介
交易宝是管理订单支付的软件系统,可对多个应用的支付业务进行统一管理和运营,为你节省时间和精力,让你专注于核心业务,实现更高的效率和利润。
特点:无需开发,开箱即用,统一管理支付订单
架构
项目结构
整个项目的目录结构大致如下:
.
├── README.md # 说明文档
├── Rswl.Payment.Web.dll # 主应用
├── wwwroot
│ └── cashier # 收银台系统目录
│ └── admin # 订单管理系统目录
├── cert # 第三方支付证书文件路径
├── appsettings.json # 系统配置
└── pay.json # 支付配置
配置
下载交易宝程序包,准备好申请的第三方支付参数信息和mysql数据库
1. 配置数据库
-
使用提供的mysql脚本创建数据库
-
编辑根目录下的
appsettings.json
文件
变更节点ConnectionStrings:DefaultConnection
值为真实的数据库连接"ConnectionStrings": { "DefaultConnection": "Server=127.0.0.1;uid=root;pwd=123456;database=rswl_payment;port=3306;", },
2. 配置支付信息
-
编辑根目录下
pay.json
文件 -
填写真实的第三方支付参数
{ "Default": { "TenpayMchId": "", //默认使用的微信支付商户id "AppId": "" //默认使用的Appid }, "Payment": [ { "PaymentChannel": 1, //1表示微信支付 "PaymentStatus": true, //true表示己启用 "MchType": 0, "MchId": "", //微信商户号 "Rate": 0.6, //微信支付费率 "APIKey": "", //微信支付APIKEY "APIKeyV3": "", //微信支付apikey v3版 "PublicKey": "", //不填 "PrivateKey": "cert/xxxx/apiclient_cert.p12", //微信P12证书路径,保在根目录cert文件夹中 "CertPassword": "", //商户号 "NotifyUrl": "https://xxx/api/tenpay/notify" //微信支付回调地址 }, { "PaymentStatus": true, //true表示己启用 "PaymentChannel": 2, //2表示支付宝 "Rate": 0.6, //支付宝费率 "MchId": "", //支付宝商户号 "PrivateKey": "", //转换后的私钥 "PublicKey": "cert/alipay/appCertPublicKey_xx4.crt", //应用公钥 "PlatformPublicKey": "cert/alipay/alipayCertPublicKey_RSA2.crt", //支付宝平台公钥证书 "PlatformRootCert": "cert/alipay/alipayRootCert.crt", //支付宝平台根证书 "NotifyUrl": "https://xxx/api/alipay/notify",//支付宝回调地址 "MchType": "0" } ], "App": [ { "AppId": "", //应用id "MchId": "1487740992", //app使用的商户号 "Token": "", "AppSecret": "ab5a2daa9", "PayChannel": 1, "Description": "weihuo mp", "AppType": 1 } ], }
-
支付证书
将证书保存至根目录cert文件夹下,并与pay.json配置填写的一致
部署
交易宝支持windows,linux系统,可在安装.net6以上的sdk的环境中运行
可参考这篇文章安装.net环境,之后上传文件到网站根目录,配置你的网站
使用
订单管理地址为 https://xxx/admin/index.html 默认帐号admin 密码admin123321
参考实例:查看订单二维码演示
场景一:有订单
应用生成业务订单信息,并将订单参数传给交易宝,由交易宝生成预支付订单,调用第三方支付
步骤:
- 业务系统生成业务订单
- 业务系统拼接预支付订单url
- 用户扫码完成支付
生成预支付订单的参数:
KaTeX parse error: Expected 'EOF', got '#' at position 13: {cashierUrl}#̲/order/base?app…{appId}&payee=软商网络&orderNo=KaTeX parse error: Expected 'EOF', got '&' at position 10: {orderNo}&̲orderName=技术服务费…{payAmount}&openId=${openId}
url参数名称 | 参数说明 | 必填 |
---|---|---|
cashierUrl | 收银台地址,例:https://pay.rscode.cn/cashier/index.html | 是 |
appId | appid应用id | 是 |
payee | 收款方名称 | 否 |
orderNo | 订单号 | 是 |
orderName | 订单名称 | 是 |
payAmount | 支付金额 | 是 |
openId | 微信支付用 户openid | 否 |
场景二:无订单
如果业务应用不提供订单信息,用户可以自己输入金额支付,完成远程收款
自定义金额的订单url规则
https://xxx/cashier/index.html#/order/base?orderType=2&payee=软商网络
可以将生成的预支付订单生成二维码,供用户扫码支付
二次开发
应用需要向交易宝系统提供业务订单创建与拉取接口,可在appsettings.json自定义接口地址
appsettings.json文件
"jyb": {
"OrderCreateUrl": "https://xxx/api/order/create", //业务系统创建订单接口 post
"OrderFetchUrl": "https://xxx/api/order/info" //业务系统拉取订单接口 post
},
业务系统返回订单JSON字符串格式
{
"orderno":'',
"order_name":'',
"pay_amount":0,
"order_status":0,
}
正确配置业务系统拉取订单接口,因为交易宝收银台验证金额时会用到
特殊需求,可以通过修改交易宝源码 AppOrderController
进行修改
事件
内部事件:
支付成功事件 PaySuccessEvent
{
mchId:'',
appId:'',
orderNo:'',
paymentChannel:1,
payAmount:1,
tradeNo:'',
attach:'',
buyerId:''
}
支付失败事件 PayFailEvent
事件的发布者:支付宝,微信支付,抖音支付
事件的订阅者:订单,收到成功消息发送CAP消息
cap事件:
支付成功 ORDERS.TRANSACTION.SUCCESS
内容与内部事件内容一致
退款
退款成功RefundSuccessEvent
mchid:'',
payChannel:1,
transaction_id:'',
out_trade_no:'',
out_refund_no:'',
amount:1
CAP事件 ORDERS.REFUND.SUCCESS
转帐
外部事件
rswl.tenpay.transfer.create 微信转帐
参数
rswl.alipay.transfer.create 支付宝转帐
order_no:'' //业务单号
product_code:''
trans_amount:'' 交易金额元
alipay_user_id:'' 支付宝帐号
remark:'' 备注
业务系统生成转帐单,支付系统记录该笔交易
内部事件:
转帐成功 TransferSuccessEvent
orderNo:'',
tradeNo:'',
payChannel:1,
amount:1
转帐失败 TransferFailEvent
orderNo:'',
errMsg:''
cap事件
ORDERS.TRANSFER.SUCCESS 返回内容:
orderNo:'',
tradeNo:'',
payChannel:1,
amount:1
ORDERS.TRANSFER.FAIL 返回内容:
orderNo:'',
errMsg:''