本文实例讲述了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程序设计有所帮助。