php银联网页支付实现方法

/**

* 取签名证书ID(SN)

* @return string

*/

public function getSignCertId()

{

return $this->getCertIdPfx($this->config['signCertPath']);

}

/**

* 签名数据

* 签名规则:

* 除signature域之外的所有项目都必须参加签名

* 根据key值按照字典排序,然后用&拼接key=value形式待签名字符串;

* 然后对待签名字符串使用sha1算法做摘要;

* 用银联颁发的私钥对摘要做RSA签名操作

* 签名结果用base64编码后放在signature域

*

* @throws \InvalidArgumentException

* @return multitype|string

*/

private function sign() {

$signData = $this->filterBeforSign();

ksort($signData);

$signQueryString = $this->arrayToString($signData);

if($this->params['signMethod'] == 01) {

//签名之前先用sha1处理

//echo $signQueryString;exit;

$datasha1 = sha1($signQueryString);

$signed = $this->rsaSign($datasha1);

} else {

throw new \InvalidArgumentException('Nonsupport Sign Method');

}

return $signed;

}

/**

* 数组转换成字符串

* @param array $arr

* @return string

*/

private function arrayToString($arr)

{

$str = '';

foreach($arr as $key => $value) {

$str .= $key.'='.$value.'&';

}

return substr($str, 0, strlen($str) - 1);

}

/**

* 过滤待签名数据

* signature域不参加签名

*

* @return array

*/

private function filterBeforSign()

{

$tmp = $this->params;

unset($tmp['signature']);

return $tmp;

}

/**

* RSA签名数据,并base64编码

* @param string $data 待签名数据

* @return mixed

*/

private function rsaSign($data)

{

$privatekey = $this->getSignPrivateKey();

$result = openssl_sign($data, $signature, $privatekey);

if($result) {

return base64_encode($signature);

}

return false;

}

/**

* 取.pfx格式证书ID(SN)

* @return string

*/

private function getCertIdPfx($path)

{

$pkcs12certdata = file_get_contents($path);

openssl_pkcs12_read($pkcs12certdata, $certs, $this->config['signCertPwd']);

$x509data = $certs['cert'];

openssl_x509_read($x509data);

$certdata = openssl_x509_parse($x509data);

return $certdata['serialNumber'];

}

/**

* 取.cer格式证书ID(SN)

* @return string

*/

private function getCertIdCer($path)

{

$x509data = file_get_contents($path);

openssl_x509_read($x509data);

$certdata = openssl_x509_parse($x509data);

return $certdata['serialNumber'];

}

/**

* 取签名证书私钥

* @return resource

*/

private function getSignPrivateKey()

{

$pkcs12 = file_get_contents($this->config['signCertPath']);

openssl_pkcs12_read($pkcs12, $certs, $this->config['signCertPwd']);

return $certs['pkey'];

}

php银联支付密钥,php银联网页支付实现方法相关推荐

  1. 支付宝支付,支付宝手机网页支付

    1.首先你需要与支付宝的蚂蚁金服建立合作关系然后进入开放平台 2.在开放平台中建立你的应用,我这里的应用已经创建好了,就不在演示了,这个也比较简单 3.在应用中添加你需要的功能,注意:添加的功能必须是 ...

  2. 银联支付页面怎么调起 php,php银联网页支付实现方法

    这篇文章主要介绍了php银联网页支付实现方法,实例分析了php操作银联网支付接口的技巧,具有一定参考借鉴价值,需要的朋友可以参考下 本文实例讲述了php银联网页支付实现方法.分享给大家供大家参考.具体 ...

  3. php实现网站支付,php银联网页支付实现方法

    php银联网页支付实现方法 php银联网页支付实现方法,实例分析了php操作银联网支付接口的技巧,具有一定参考借鉴价值,需要的朋友可以参考下. 这里介绍的`银联WAP支付功能,仅限消费功能. 1. P ...

  4. think PHP 银联支付,thinkphp3.2整合银联手机网页支付

    1.和银联签约,签约成功之后才进行技术集成,到银联官方下载手机网页支付的技术文档和demo代码: https://open.unionpay.com/ajweb/help/file/techFile? ...

  5. 银联支付-手机网页支付接口开发

    这2天因为项目需要,银联支付的手机网页支付,已经把测试ok了, 所以这里做个记录. 1,到银联的官网下载demo,注意官网是按照平台区别的(pc端.手机网页.手机控件),下载手机网页版本的demo.d ...

  6. 使用Java完成网上支付(1. 银联)

    一. 账号申请 1. 打开网址,并注册 https://merchant.unionpay.com/cas/login?service=http%3A%2F%2Fmerchant.unionpay.c ...

  7. 第三方支付平台:银联在线支付

    前言 现将银联在线支付所需相关资料整理如下,前期资料仅涉及相关支付接口内容初步了解,不涉及具体技术实现环节. 银联商户注册所需信息 1.填写两方合作协议并打印二份盖章,一式二份(法定代表人签字盖公章并 ...

  8. php 银行支付通道_PHP银联在线支付接口的开发实例

    本文主要和大家分享PHP银联在线支付接口的开发实例,希望能帮助到大家. 1. 登录银联自助化测试平台(登陆地址:open.unionpay.com),登录后,点击我的产品,如下:点击右方需要测试的接口 ...

  9. IOS开发之—— IOS 支付 [支付宝、银联、微信]

    支付宝iOSsdk官方下载sdk地址:https://b.alipay.com/order/productDetail.htm?productId=2013080604609654&tabId ...

最新文章

  1. Java中事件监听机制
  2. 初识Nginx服务器
  3. flip java_java的flip(). 这里用flip()有什么作用?这是反转缓冲区的方法,好像用不上。...
  4. CF1511G-Chips on a Board【倍增】
  5. java 新功能_Java 14的新功能
  6. uniapp中qrcode生成二维码后传的参数不见了_二维码扫描登录,你必须知道的 3 件事...
  7. iOS开发初探篇——UITabBarController
  8. 计算机视觉SLAM方向顶会
  9. Spring属性编辑器解读(转载)
  10. kafaka,activityMQ,rabbitMQ消息中间件对比
  11. 萤火商城V2.0开源版[uni-app端],轻量级前后端分离的电商系统,支持微信小程序 + H5+ 公众号 + APP
  12. 深入理解socket中的recv函数和send函数
  13. es7 如何从项目resource读取index的mapping、setting.json文件
  14. 时序数据库TSDB逐日统计的Jave算法实现过程
  15. linux安装vscode(中标麒麟+龙芯CPU)
  16. vue element UI 学习总结笔记(十一)_vue中打印模板设置
  17. 关于java中JDBC读取字段属性原理
  18. 周末闲暇用javascript写个网页“斗兽棋”小游戏
  19. 客户端设置超时,max_fails失效----问题分析
  20. WPF触控程序开发(三)——类似IPhone相册的反弹效果

热门文章

  1. 关于图片阿里云OSS的处理x-oss-process
  2. pythonNet 06进程pool
  3. 【Lifelong learning】Efficient Meta Lifelong-Learning with Limited Memory
  4. R语言biom包安装和读取文件格式无法识别问题解决
  5. 如何使用facebook_如果每个人都已经开始使用Facebook,Facebook能否继续发展?
  6. ANSYS Maxwell 2D螺线管磁场分析
  7. oracle房贷还款计划,还款计划表数据查询
  8. Dubbo RPC框架都支持哪些协议
  9. 知道了为什么osg::impostor可以这样设置geometry的QUADS了
  10. 【数据结构与算法】之深入解析“保持城市天际线”的求解思路与算法示例