Releases: Tinywan/notes
Releases · Tinywan/notes
v0.02
支付架构图
业务应用
- 支付网关
- 运营管理
外接应用
- 支付宝
- 微信
内部功能引用
- 对账应用
- 清算应用
- 消息应用
核心模块
- 用户
- 账户
- 交易订单
MySQL 5.7 用户添加
添加新用户
新建一个用户: CREATE USER 'pay'@'%' IDENTIFIED BY 'pay_123456';
新建一个用户名为pay
的用户,密码为pay_123456
,%
表示可以远程连接数据库
刷新权限:flush privileges;
为用户创建数据库
create database test DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
给用户分配权限
授予用户通过外网IP对于该数据库的全部权限
grant all privileges on `testdb`.* to 'test'@'%' identified by '123456';
授予用户在本地服务器对该数据库的全部权限
grant all privileges on `testdb`.* to 'test'@'localhost' identified by '123456';
刷新权限
flush privileges;
支付系统
基础设施
- 1、服务器(Linux)
- 2、域名(备案),能提供Https服务更好
- 3、环境搭建
- WEB服务:
Openresty(Nginx)
- 开发语言
PHP > 7.0
- 数据库
- 关系型:
MySQL >= 5.7
- 非关系型:
Redis >= 3.2
- 关系型:
- 开发框架:TP5.0
- 依赖扩展
- PHP-PDO扩展
- PHP-Redis扩展
- PHP-Qcord二维码扩展
- PHP-GD库扩展
- WorkerMan 服务
- WEB服务:
上游渠道
- 1、对接上游
- 2、支付方式
- 银联网关(快捷)
- 支付宝(H5、扫码、WAP)
- 微信(H5、扫码、WAP)
核心系统
- 1、代码自动化部署(coding集成)
- 2、渠道对接开发
- 3、商户管理
- ...
下游渠道
- 1、接口文档完善
- 2、风控
- 3、对接渠道
- 4、业务扩展
init
赤龙支付
支付账号信息
- 银行卡号:360101198309255010
- 密码:hswl0571
- 交易密码:446688
平台信息
和壹付平台支付
- 平台:saas.yeeyk.com
- 账号:账号:
3223017786@qq.com
密码:Chilong123
- 支付接口:http://saas.yeeyk.com/saas-trx-gateway/order/acceptOrder
- 提现接口:http://saas.yeeyk.com/saas-trx-gateway/order/queryOrder
汇支付平台
如何接入?
- 【渠道管理】-【渠道配置】添加平台信息
- 【支付渠道】配置使用哪一种支付方式
如何测试?
测试配置信息
进入后台管理
- 【商户模块】-【商户列表】-测试账号
- 编辑:【渠道商号】->【添加渠道】如:和壹付( 广州半贸贸易有限公司)
- 编辑:【支付开通】->开启要具体测试【支付方式】进行编辑
- 如要测试【银联网关】,选择编辑,在下拉列表中选择【支付渠道】就可以了
- 测试DEMO
支付(测试)
gateWay($option)
接收到的参数如下:
{
"total_fee": "1",
"goods": "银联测试",
"order_sn": "22161528351633",
"client": "web",
"bank_code": "CCB",
"client_ip": "127.0.0.1",
"notify_url": "http:\/\/pay.env\/index\/index\/test10",
"return_url": "http:\/\/pay.env\/index\/index\/test22",
"mch_id": "12001",
"version": "1.0",
"order_no": "S120011806071407171800"
}
同步接口返回数据:
- 同步通知地址:
https://pay.hongnaga.com/return
returnUrl(PayRepository $payRepository)
网关地址调用支付接口PayRepository
的notify()
- 支付参数
- 渠道:
$channel_str
- 商户订单号:
$mch_order_no
- 商家ID:
$mch_id
- 渠道:
- 通过
App::invokeClass([$channel_str])
实例化具体的渠道支付类 - 返回一个跳转地址URL
{
"code" : "00000",
"message" : "成功",
"payUrl" : "http://saas.yeeyk.com/saas-trx-gateway/order/fetchPay?payNo=201806071115482039216151SP",
"trxMerchantNo" : "80086000452",
"hmac" : "7f8dde1f2f6c032facd469bad79ceea5"
}
异步回调测试
- 异步通知地址:
https://pay.hongnaga.com/notify
notify(PayRepository $payRepository)
网关地址调用支付接口PayRepository
的notify()
- 接受
GET/POST
数据,这里接受到的数据为一个数组$data
- 根据判断该回调属于哪个支付渠道(支付 or 提现)
- 支付参数
- 渠道:
$channel_str
- 商户订单号:
$mch_order_no
- 商家ID:
$mch_id
- 渠道:
- 通过
App::invokeClass([$channel_str])
实例化具体的渠道支付类 - 设置商户渠道配置
$object->setMchChannelConfig($mch_id)
- 具体渠道异步处理
$object->notify($data)
,如:Saas.php
- 参数验证
- 签名验证
- 第三方接口返回数据验证
- 根据第三方接口参数返回一个数组,成功或者错误
- 判断是 ** 支付订单** 还是 提现订单
- 支付订单
- 调用方法:
payNotify($channel_str, $result, $is_send_notify)
- 查询订单、订单判断
- 查询渠道配置
- 判断订单状态,
-1 支付失败 0 未支付 1 已支付 2 已退款
- 开启事务修改订单状态(前提是第三方返回结果必须是成功的,success 结果)
- 为商户增加余额
- 增加余额明细,数据表:
jd_merchant_balance_record
- 如果订单状态
notify_status != 'yes'
并且需要通知给客户 - 通过
sendNotify($order_no, $type = 1)
发送给客户异步通知 - 根据发送状态修改订单发送状态
notify_status == yes
- 调用方法:
- 提现订单
- 支付订单
- 返回数据格式
{
"data": {
"reCode": "1",
"trxMerchantNo": "800666000037",
"trxMerchantOrderno": "1504233022730",
"result": "SUCCESS",
"productNo": "WX_YF",
"memberGoods": "1504233022730",
"amount": "10.00",
"retMes": "",
"hmac": "203r5riLq9jJ7rt7e348yzG5fBG96U838a",
},
"code": "000000" // 查单返回码
}
提现/代付(测试)
-----------------------------------------------------------------
商户同步/异步响应参数
跟多参数了解:赤龙支付
同步接口返回数据
为了模拟客户的请求访问
设置同步回调地址为赤龙支付
的:http://pay.yo1c.cc/index/index/test22
方便测试
{
"order_no": "S120011806071532428535",
"mch_order_no": "89941528356762",
"goods": "银联测试",
"total_fee": 1,
"payment": "gateWay",
"rate": 0.007,
"service_charge": 0.002,
"status": 1,
"create_time": "2018-06-07 15:32:43",
"pay_time": "2018-06-07 15:33:16",
"sign": "19ad4aeb462a13200caf24d0724fb4c3"
}