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

php银联网页支付实现方法

php银联网页支付实现方法,实例分析了php操作银联网支付接口的技巧,具有一定参考借鉴价值,需要的朋友可以参考下.

这里介绍的`银联WAP支付功能,仅限消费功能。

1. PHP代码如下:

复制代码 代码如下:

namespace common\services;

class UnionPay

{

/**

* 支付配置

* @var array

*/

public $config = [];

/**

* 支付参数,提交到银联对应接口的所有参数

* @var array

*/

public $params = [];

/**

* 自动提交表单模板

* @var string

*/

private $formTemplate = <<

支付

跳转中...

%s

document.onreadystatechange = function(){

if(document.readyState == "complete") {

document.pay_form.submit();

}

};

HTML;

/**

* 构建自动提交HTML表单

* @return string

*/

public function createPostForm()

{

$this->params['signature'] = $this->sign();

$input = '';

foreach($this->params as $key => $item) {

$input .= "\t\t\n";

}

return sprintf($this->formTemplate, $this->config['frontUrl'], $input);

}

/**

* 验证签名

* 验签规则:

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

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

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

* 用银联公钥对摘要和签名信息做验签操作

*

* @throws \Exception

* @return bool

*/

public function verifySign()

{

$publicKey = $this->getVerifyPublicKey();

$verifyArr = $this->filterBeforSign();

ksort($verifyArr);

$verifyStr = $this->arrayToString($verifyArr);

$verifySha1 = sha1($verifyStr);

$signature = base64_decode($this->params['signature']);

$result = openssl_verify($verifySha1, $signature, $publicKey);

if($result === -1) {

throw new \Exception('Verify Error:'.openssl_error_string());

}

return $result === 1 ? true : false;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值