快钱 java demo_快钱聚合支付(一码付)对接demo
备注:以下代码基于PHP laravel框架,引用了自带的函数。array_get($array, "key") 为数组中取元素,类似于$array["key"]。快钱后端语言为java,对接快钱时遇到了一些问题,今天整理下,希望可以帮到更多的人。
一、后端拼接唤起支付url
/**
* 快钱一码付(聚合支付)相关配置
*/
$kuaiqian = [
"merchantCode" => "10210xxxxxx", //商户会员号
"merchantId" => "812310xxxxx", //商户编号
"terminalId" => "71075xxxxx", //终端编号
"key" => "xxxxxxx", //支付秘钥
"payUrl" => "https://pay.99bill.com/prod/html/agent-static/index.html", //快钱前端唤起支付url
"returnUrl" => "https://xxx/return_url", //支付成功,前端回调url
]
/**
* 拼接支付参数
* @param $orderNumber
*/
function getPayUrl($orderNumber, $money)
{
$data = [
"requestTime" => date("YmdHis"),
"externalTraceNo" => $orderNumber,
"merchantCode" => array_get($kuaiqian, "merchantCode"),
"merchantId" => array_get($kuaiqian, "merchantId"),
"terminalId" => array_get($kuaiqian, "terminalId"),
"amt" => $money,
"returnUrl" => array_get($kuaiqian, "returnUrl")."?orderNumber=".$orderNumber //前端同步回调地址
];
$sign = kuaiqian_sign($data);
$data["secretInfo"] = $sign;
$string = "";
foreach ($data as $key => $value) {
$string .= $key."=".$value."&";
}
return array_get($kuaiqian, "payUrl")."?".rtrim($string, "&");
}
/**
* 快钱支付签名
*/
function kuaiqian_sign($data)
{
ksort($data);
$res = "";
foreach ($data as $key => $value) {
if (!$value) continue; //参数值为空时不参与签名
$res .= $key."=".$value."&";
}
$stringSignTemp = $res."key=".array_get($kuaiqian, "key");
return strtoupper(md5($stringSignTemp));
}
二、回调签名(和支付、微信不同的是快钱的回调地址需要提前和业务联系配置)
/**
* 支付异步回调
* @param Request $request
*/
function payNotify(PayRepository $payRepository)
{
$request = file_get_contents("php://input");
$request = explode("&", $request);
//将回调数组转为完整数组
foreach ($request as $data) {
$tmp = explode("=", $data);
$result[array_get($tmp, "0")] = urldecode(array_get($tmp, "1"));
}
//支付回调签名验证
$signVerify = kuaiqian_notify_sign_verify($result);
//签名不通过
if (!$signVerify) {
return "1";
}
//系统内部订单号
$orderNumber = array_get($result, "externalTraceNo");
//订单已经支付成功,不需要重复回调
if (array_get($payOrder, "status") != PayOrder::PAY_ORDER_STATUS_NOT) {
return "0";
}
if (array_get($result, "processFlag") === "0") { //支付成功,处理内部业务逻辑
$result = "success"; //处理支付成功以后的业务逻辑
if (!$result) {
return "1";
} else {
return "0";
}
} else { //支付不成功,也不允许再次回调
return "0";
}
}
/**
* 快钱支付接口通知验签结果校验
* @param $datas array 快钱回调完整报文
*/
function kuaiqian_notify_sign_verify($datas)
{
$signature = array_get($datas, "signature"); //获取签名
//获取参与验签的数组节点(array_only()为laravel封装的函数,获取数组中指定键的参数,可以自己封装。)
$datas = array_only($datas, ["processFlag", "txnType", "orgTxnType", "amt", "externalTraceNo", "orgExternalTraceNo",
"terminalOperId", "authCode", "RRN", "txnTime", "shortPAN", "responseCode", "cardType", "issuerId"]);
//节点值为空时屏蔽节点,不需要参与验签
foreach ($datas as $key => $value) {
if ($datas[$key] === "") {
unset($datas[$key]);
}
}
$result = implode("", $datas); //等待验签字符串拼接
$publicKey = openssl_get_publickey(file_get_contents(public_path("xxxx/public.pem"))); #特别强调:验签公钥快钱给的是.cer格式,PHP需要转为pem(openssl x509 -inform der -in xx.cer xx.pem)
return openssl_verify($result, base64_decode($signature), $publicKey);
}
三、后记
快钱后端为Java,导致回调验签的时候费了好大力气才搞定,今天整理了下,需要的伙伴可以试试,有问题可以私我。(快钱做大做强了,但技术对接服务这块真的不怎么样,坑死。)
快钱 java demo_快钱聚合支付(一码付)对接demo相关推荐
- 聚合支付收款码怎么申请
目前消费者的付款方式多样,聚合支付成了商家的必须,不然得来回切换收款方式,这是很麻烦的.聚合支付收款码可以避免在一个收银台放置较多二维码,节省了空间.而且避免了提现,直接进入银行卡后可以让用户及时了解 ...
- 聚合支付源码怎么选择
随着聚合支付的热潮席卷中国,越来越多有想法的创业者投身到聚合支付行业当中,打算占一杯羹.他们首要解决的就是聚合支付系统的开发问题,其中聚合支付源代码的设置则是一切发展的奠基.所以,什么是聚合支付源码, ...
- 银行和服务商聚合支付收款码的区别在哪?
数据显示,从2014年到2020年,人们对移动支付的依赖性增加,从零开始促进了聚合支付行业交易规模的快速增长.2014年,聚合支付市场交易规模仅为0.1万亿元左右,2020年已增至63万亿元.使用聚合 ...
- java版聚合支付源码Spring Cloud+Spring Boot+mybatis+security+uniapp+Redis+MQ+VR全景+b2b2c多商家入驻前后端分离商城源码
@源码地址来源: https://minglisoft.cn/honghu/business.html 电商微信支付.支付宝支付.余额支付代码 package com.honghu.cloud.con ...
- java对接聚合支付(计全付)
目录 背景 准备工作,注册获取开发参数 开发 下单接口 回调接口 查询订单接口 背景 项目中本来是使用微信和支付宝分开的收款码收款,现在需要实现一张二维码图片,微信/支付宝 都能扫码付款 这里可以先看 ...
- java三路快排,java二路快排很慢
老师,以下是我二路快排的java代码 public class quickSortTwoway { public quickSortTwoway() {}; public static void qu ...
- 运行sql快还是java代码快,让Java代码跑得更快
1.将一些系统资源放在池中,如数据库连 接,线程等.在standalone的应用中,数据库连接池可以使用一些开源的连接池实现,如C3P0,proxool和DBCP等,在运行在容器中的应 用这可以使用服 ...
- 易宝java面试_java 易宝支付源码 (已测试成功,有测试步骤图片)
[实例简介] 1.登陆页面填入信息 选择银行. 2.网上找的新的ID,和密码加入到配置文件中使用 3.点击提交后连接到易宝的支付页面. 4.通过建行支付的连接(显示建行已经扣了0.01元) http: ...
- 小呆聚合支付源码开源修正版支持易支付对接各大网站,APP离线完美回调
@全体成员v6.4.1升级到v6.4.2 1.增加两套支付模版,用户可以后台自由切换模式 2.优化默认支付模版,增加订单来源,商品名称 3.增加app在各个手机上安装指引教程 4.优化其他细节 @全体 ...
最新文章
- 2019年度最受欢迎中国开源软件公布
- 【大牛疯狂教学】cdhkafka打开的文件描述符临界阈值
- 运维基础(13)日志切割工具 Logrotate
- 组态王接入多比物联网云平台
- 南邮CTF--bypass again
- 二叉树的递归与非递归
- [转]在Sql Server中将字符串分割成表格数据示例
- 联想网络同传系统用户手册(联想EDU应用用户手册)[联想硬盘保护,联想网络控制工具]
- atan和atan2的区别-Matlab三角函数
- 在 Java 应用程序中访问USB设备
- web页面上联系QQ客服功能实现——一行代码搞定
- 本地用微信测试公众号开发对接微信支付思路
- Nanopore 纳米孔 测序数据处理 微生物 16S全长 Centrifuge的安装和使用
- sqlserver 2017 还原遇到报错The operating system returned the error ‘21(设备未就绪。)‘
- (转)纵观国内外证券公司IT发展史
- K8S中的cordon、uncordon和drain node标签 节点标签
- R语言ggplot2 |绘制高颜值森林图
- matlab表示sa函数,SA:T1编写主函数法和T2Matlab自带的SA工具箱GUI法,两种方法实现对二元函数优化求解——Jason niu...
- 现场签约及达成合作意向金额6.8亿多元 山东104家企业闪耀第十五届“中博会”
- XShell 7 绿色版一键安装教程