免签第三方支付解决方案

我要开发同款
?才抽一半2022年11月28日
755阅读
作品源文件
gz格式 72.44 KB
¥5000.00

作品详情

该应用旨在解决资质不够的商家进行银行卡自动充值结算业务
通过识别银行卡到账信息推送内容完成系统账号充值及付款操作。每笔付款业务需要为付款金额增加小数点进行判断,懂的再买
app需申请短信权限,使用时需要一台手机设备实时运行

参数设置

短信通道号码: 来自银行卡推送消息的号码
服务器API: 需要推送的目标服务器api接口
关键词:来自银行卡推送消息内容的关键字,支持多个关键词(某些银行发送短信的格式会有所变化,英文半角逗号隔开)
签名密钥signature:与服务器同步设置,防止他人通过该接口恶意提交信息

数据推送接口需要根据签名sign(sign内容通过header获取)字段进行数据验证,签名规则:sign =md5(JSON.stringify(data)+ signature)

开始监听时会进行服务器检查,使用
{
type: 'ping'
}
向服务器发起请求,服务器应返回状态码 { code: 200 }

信息正式上报内容格式
{
type: 'report',
msg: 'sms content',
timestamp: 'sms receive time'
}
签名验证规则 sign = md5(data.msg+ data.timestamp + data.type + signature)
短信内容上报信息在data包中额外加入了sign字段,完整上报信息为

{
type: 'report',
msg: 'sms content',
timestamp: 'sms receive time',
sign: sign
}
服务器接口业务处理方案,当用户进行充值或者支付时,需要向数据库创建一笔付款订单,并且订单金额需要进行小数点追加,比如实际付款应付 100.00, 那么可以设置为100.01, 每笔订单小数点不重复,根据测试,小数点从1-99足够,也就是100.01-100.99,此处操作可以存储到缓存对象中,每次添加订单从缓存当中获取小数点对象并+1,例子如下

$decimal = Cache::get('decimal');
if(!$decimal) {
// 如果未设置缓存,那么初始化一个缓存
Cache::set("decimal", 1);
$decimal = 1;
}else{
// 如果已设置缓存,那么缓存自增
if($decimal < 99) {
$decimal += 1;
Cache::set("decimal", $decimal);
}else{
// 如果小数点已遍历99遍以上,则重置
Cache::set('decimal", 1);
$decimal = 1;
}
}

根据短信推送时间和金额找到支付订单然后完成接下来的操作

$str = "您尾号xxxx卡x月x日 00:12xx银行收入(他行汇入) 120.43元,余额xx元,对方户名:xxx,对方账户尾号:xxxx。【xx银行】";
此处$str 变量中定义了一条入账短信,我们对短信内容进行提取,主要为提取入款金额和时间,我们可以的到时间为x月x日 00:12 金额为 120.43

把时间格式化为时间戳结合金额去数据库匹配订单,然后完成接下来的付款流程即可,多条短信格式,进行遍历排除法处理

声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论