银联在线支付对接流程以及签名算法
银联在线支付
简介
银联在线支付支持PC网关、手机SDK、WAP网关、云闪付等多种支付场景,其中云闪付产品可以完美支持ApplePay、Samsung Pay、Huawei Pay等市面上常见的手机厂商推出的支付品牌,对接银联在线支付,可弥补因无微信客户端和支付宝客户端所造成的用户流失,还可以做形式多样的支付优惠活动,银联可通过对商户号交易控制实现其立减、满减等支付优惠活动。
支付流程
根据开发文档组织支付报文,发起网关支付请求。APP支付,需要curl请求支付网关(appTransReq.do),获取到tn码,然后app通过tn码发起支付请求。PC、WAP网关支付,则直接将支付报文通过表单POST提交至银联支付网关(frontTransReq.do)。
签名机制
银联在线支付,商户端在调用支付网关、退款网关、支付查询网关、退款查询网关等业务需要使用OpenSSL对报文进行非对称加密,加密证书类型为RSA,加密算法为SHA-1。同样,商户端对来自银联发来的数据报文,也要同样的使用银联提供的公钥文件对其签名做验证操作;
在线开发文档
https://open.unionpay.com/ajweb/product
证书下载、导出流程
https://open.unionpay.com/ajweb/help/file/techFile?cateLog=agreement
银联在线支付签名验签算法
- PHP版本
/**
* 银联在线支付demo
* 使用OpenSSL进行非对称加密、验签
* @author think2017@gmail.com
*/
class chinapayPayment
{
public function __construct()
{
}
/**
**@desc 获取支付请求报文
**/
public function ransReqParams()
{ //Todo...
}
/**
**@desc 退款申请
**/
public function doRefund()
{ //Todo...
}
/**
**@desc 支付查询
**/
public function doQuery()
{ //Todo...
}
/**
**@desc 退款查询
**/
public function doRefundQuery()
{ //Todo...
}
/**
* 使用商户私钥文件对报文进行签名
*/
public function signature($postPrams)
{ ksort($postPrams); $strInfo = '';
foreach ($postPrams as $key=>$val) { if($strInfo){ $strInfo .= "&".$key."=".$val;
}else{ $strInfo = $key."=".$val;
}
}
$retval = $this->readPrivateKeyData();
if ($retval['code'] != 200) { return false;
} $sha1x16 = sha1($strInfo, FALSE);
if (openssl_sign($sha1x16, $signature, $retval['privateKey'], OPENSSL_ALGO_SHA1)) { $signatureBase64 = base64_encode($signature);
} return $signatureBase64 ? $signatureBase64 : false;
}
/**
* 使用银行公钥文件进行验签
*/
public function verfiySign($requestData)
{ $retval = $this->readPublicKeyData();
if ($retval['code'] != 200) { return false;
}
$isSuccess = false;
if( $retval['certId'] == $requestData['certId'] ){ $signature = $requestData['signature'];
unset($requestData['signature']);
$sRequest = $this->coverParamsToString($requestData);
$sha1x16 = sha1($sRequest, false);
$isSuccess = openssl_verify($sha1x16, base64_decode($signature), $retval['publicKey'], OPENSSL_ALGO_SHA1);
}
return $isSuccess;
}
/**
* 读取商户私钥,私钥证书文件后缀为.pfx
**/
private function readPrivateKeyData()
{ $pkcs12 = file_get_contents($this->privateKeyFile); if (openssl_pkcs12_read($pkcs12, $certs, $this->privatekeyPass)) {
$x509data = $certs ['cert'];
openssl_x509_read ( $x509data );
$certdata = openssl_x509_parse ( $x509data );
return ['code' => 200, 'certId' => $certdata['serialNumber'], 'privateKey' => $certdata['pkey']];
}
return ['code' => 500, 'certId' => '', 'privateKey' => ''];
}
/**
* 读取银行公钥,公钥证书文件后缀为.cer
**/
private function readPublicKeyData()
{ $x509data = file_get_contents($this->publicKeyFile);
openssl_x509_read($x509data);
$certdata = openssl_x509_parse($x509data);
if ($certdata) { return ['code' => 200, 'certId' => $certdata['serialNumber'], 'publicKey' => $x509data];
}
return ['code' => 500, 'certId' => '', 'publicKey' => ''];
}
/**
* 数组 排序后转化为字体串
* @param array $params
* @return string
*/
public function coverParamsToString($params)
{ $strSign = '';
ksort($params);
foreach($params as $key => $val){ if($key == 'signature'){ continue;
}
$strSign .= sprintf("%s=%s&", $key, $val);
}
return substr($strSign, 0, strlen($strSign) - 1);
}
}
银联在线支付对接流程以及签名算法相关推荐
- 银联在线支付功能流程
1.入网流程 2.资金流程 3.交易流程 入网过程总结如下 1.选择产品 以网关支付为例 2.选择收单机构 3.与收单机构联系,收单机构以邮件的方式下发入网协议, 商户准备入网资料(入网申请表,入网协 ...
- 银联在线支付从upop切换到全渠道的交易流程
2019独角兽企业重金招聘Python工程师标准>>> 银联在线支付在2014年重建了一个新的系统(全渠道acp)代替老系统(upop),并2014-2015期间将所有商户从upop ...
- 第三方支付平台:银联在线支付
前言 现将银联在线支付所需相关资料整理如下,前期资料仅涉及相关支付接口内容初步了解,不涉及具体技术实现环节. 银联商户注册所需信息 1.填写两方合作协议并打印二份盖章,一式二份(法定代表人签字盖公章并 ...
- 银联在线支付5100030异常
对接银联在线支付时候,打开银联在线接口返回的html后,提示报文格式错误 5100030 银联在线错误码
- 关于银联在线支付和短彩信接口的开发——总结
9月份开始做用二维码做闭环的一个在线订购景区门票的项目,其中这样做是很好的,用二维码连接了线上与线下的交易和兑券.银联在线支付接口(asp.net cs)做的很好,方便调用开发.就是处理回值的时候得找 ...
- 银联在线php支付接口,ecshop银联在线支付接口插件(官方版)
分享一个银联在线支付(UPOP)ecshop支付接口的插件,亲自用过.你只需放到ec对应的目录,然后进到后台"支付方式"页面安装就能调用了.希望能对你有用!! 此插件在ecshop ...
- java银联在线支付开发_银联在线支付案例代码
[实例简介] 银联在线支付的测试案例代码 [实例截图] [核心代码] PayOnLine └── PayOnLine ├── src │ ├── acp_sdk.properties │ └─ ...
- Firefox全面兼容中国银联“在线支付”
http://www.linuxdiyf.com/viewarticle.php?id=202865 来源: 驱动之家 昨日下午,中国银联正式推出了"在线支付"和"互联网 ...
- “银联在线支付”签约无需任何条件,个人也可以完成签约
申请条件:"银联在线支付"签约无需任何条件,个人也可以完成签约,只需要您购买我们开通好的企业支付宝,账户您自己管理,资金您自己操作(QQ3.0.5.7.1.0.4.3.9),或您也 ...
最新文章
- 全球机器学习领域顶尖的16家公司
- 1、创建数据表(CREATE TABLE语句)
- python将非0数视为false_python 面试题
- stylus之运算符(Operators)
- 读书笔记:Information Architecture for the World Wide Web, 3rd Edition 北极熊 第一部分 1-3...
- pydev工程linux运行,Linux平台下Python的安装及IDE开发环境搭建
- cocos2dX之一——安卓环境搭建
- Python3 encode中的unicode-escape和raw_unicode_escape
- 上传文件插件uploadify应用简单说明
- 五、登录页倒计时制作《仿淘票票系统前后端完全制作(除支付外)》
- python巡检网络设备_pyhton对网络设备的日常巡检
- 计算机信息安全法规和道德规范,信息安全法律法规与道德规范ppt
- MyBatis批量插入的五种方式
- C++运算符重载函数
- 涂鸦智能设备接入homeassistant
- Big-man的Bootstrap篇(一)
- qt找不到打印机_Qt之打印机总结
- 创建koa2项目步骤
- 企业IT项目开发之七宗罪(下篇)
- Apache Commons Email 怎样设置接收方发送已读回执?