本文实例讲述了php版银联支付接口开发的方法。分享给大家供大家参考,具体如下:
支付接口现在有第三方的支付接口也有银行的支付接口。这里就来介绍php版本银联支付接口开发的方法。
银联支付,首先要注意二重要的部分:
PHP运行环境是5.4.18以上
开了扩展openssl
开发手册上面的列子只做参考,因为基本都是错的。你可以试着去官网下一个demo。。。注意现在银联开发,没有测试密钥提供,只能在正式环境开发
下面是我用ThinkPHP编写的一个支付类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
|
/**
* 银联支付 v0.1
* @auther:Summer<dengwz7788@gmail.com>;
* @date:20151202
* **/
class NetPayAction extends BaseAction{
//在类初始化方法中,引入相关类库
public function _initialize() {
header( "Content-type:text/html;charset=utf-8" );
vendor( 'Netpay.util.common' , "" , ".php" ); //导入加密核心文件夹
vendor( 'Netpay.util.SecssUtil' , "" , ".class.php" ); //导入加密核心文件夹
vendor( 'Netpay.util.Settings_INI' , "" , ".php" ); //导入加密核心文件夹
vendor( 'Netpay.util.Settings' , "" , ".php" ); //导入加密核心文件夹
$this ->securityPropFile= $_SERVER [ 'DOCUMENT_ROOT' ] . "/ThinkPHP/Extend/Vendor/Netpay/config/security.properties" ; //谁知道这是啥,反正他们要我加的
$this ->b2cPaySend = __APP__. "/Index/NetPay/b2cPaySend" ;
$this ->b2cRefundSend = __APP__. "/Index/NetPay/b2cRefundSend" ;
$this ->b2cQuerySend = __APP__. "/Index/NetPay/b2cQuerySend" ;
$this ->;MerBgUrl = __APP__. "/Index/NetPay/MerBgUrl" ;
$this ->MerPageUrl = __APP__. "/Index/NetPay/MerPageUrl" ;
}
public function index()
{
$paramArray = array (
'MerId' => '商户号' ,
'MerOrderNo' => '0000001944663232' ,
'OrderAmt' => '1' ,
'TranDate' => '20151219' ,
'TranTime' => '171248' ,
'TranType' => '0001' ,
'BusiType' => '0001' ,
'Version' => '20140728' ,
'CurryNo' => 'CNY' ,
'AccessType' =>; '0' ,
'CommodityMsg' => '测试商品1号' ,
'MerPageUrl' => $this ->MerBgUrl,
'MerBgUrl' => $this ->MerPageUrl,
'MerResv' => 'MerResv' ,
);
if ( count ( $paramArray ) >0) {
$dispatchUrl = $this ->b2cPaySend;
$transResvedJson = array ();
$cardInfoJson = array ();
$sendMap = array ();
foreach ( $paramArray as $key => $value ) {
if (isEmpty( $value )) {
continue ;
}
if (startWith( $key , "trans_" )) {
$key = substr ( $key , strlen ( "trans_" ));
$transResvedJson [ $key ] = $value ;
} else
if (startWith( $key , "card_" )) {
$key = substr ( $key , strlen ( "card_" ));
$cardInfoJson [ $key ] = $value ;
} else {
$sendMap [ $key ] = $value ;
}
}
$transResvedStr = null;
$cardResvedStr = null;
if ( count ( $transResvedJson ) >0) {
$transResvedStr = json_encode( $transResvedJson );
}
if ( count ( $cardInfoJson ) > 0) {
$cardResvedStr = json_encode( $cardInfoJson );
}
$secssUtil = new SecssUtil();
if (! isEmpty( $transResvedStr )) {
$transResvedStr = $secssUtil ->decryptData( $transResvedStr );
$sendMap [ "TranReserved" ] = $transResvedStr ;
}
if (! isEmpty( $cardResvedStr )) {
$cardResvedStr = $secssUtil ->decryptData( $cardResvedStr );
$sendMap [ "card_" ] = $cardResvedStr ;
}
$securityPropFile = $this >securityPropFile;
$secssUtil ->init( $securityPropFile );
$secssUtil ->sign( $sendMap );
$sendMap [ "Signature" ] = $secssUtil ->getSign();
$_SESSION = $sendMap ;
header( "Location:" . $dispatchUrl );
}
}
public function b2cPaySend(){
layout(false);
$settings = new Settings_INI();
$settings ->oad( $this ->securityPropFile);
$pay_url = "https://payment.chinapay.com/CTITS/service/rest/page/nref/000000000017/0/0/0/0/0" ;
$html = "<form name='payment' action='{$pay_url}' method='POST' target='_blank'>;" ;
$params = "TranReserved;MerId;MerOrderNo;OrderAmt;CurryNo;TranDate;SplitMethod;BusiType;MerPageUrl;MerBgUrl;SplitType;MerSplitMsg;PayTimeOut;MerResv;Version;BankInstNo;CommodityMsg;Signature;AccessType;AcqCode;OrderExpiryTime;TranType;RemoteAddr;Referred;TranTime;TimeStamp;CardTranData" ;
foreach ( $_SESSION as $k => $v ) {
if ( strstr ( $params , $k )) {
$html .= "<input type='hidden' name = '" . $k . "' value ='" . $v . "'/>" ;
}
}
$html .= "<nput type='button' type='hidden' value='提交订单' >" ;
$html .= "<;/from>" ;
$this ->html = $html ;
$this ->display();
}
public function pgReturn(){
if ( $_POST ) {
if ( count ( $_POST ) > 0) {
$secssUtil = new SecssUtil();
$securityPropFile = $this >securityPropFile;
$secssUtil ->init( $securityPropFile );
$text = array ();
foreach ( $_POST as $key => $value ){
$text [ $key ] = urldecode( $value );
}
if ( $secssUtil ->verify( $text )) {
//支付成功
$_SESSION [ "VERIFY_KEY" ] = "success" ;
} else {
//支付失败
$_SESSION [ "VERIFY_KEY" ] = "fail" ;
}
}
}
}
}
|
银联支付应该是算比较简单的!!
希望本文所述对大家PHP程序设计有所帮助。