php版銀聯(lián)支付接口開發(fā)簡明教程
本文實例講述了php版銀聯(lián)支付接口開發(fā)的方法。分享給大家供大家參考,具體如下:
支付接口現(xiàn)在有第三方的支付接口也有銀行的支付接口。這里就來介紹php版本銀聯(lián)支付接口開發(fā)的方法。
銀聯(lián)支付,首先要注意二重要的部分:
PHP運行環(huán)境是5.4.18以上
開了擴展openssl
開發(fā)手冊上面的列子只做參考,因為基本都是錯的。你可以試著去官網(wǎng)下一個demo。。。注意現(xiàn)在銀聯(lián)開發(fā),沒有測試密鑰提供,只能在正式環(huán)境開發(fā)
下面是我用ThinkPHP編寫的一個支付類
/**
* 銀聯(lián)支付 v0.1
* @auther:Summer<dengwz7788@gmail.com>;
* @date:20151202
* **/
class NetPayAction extends BaseAction{
//在類初始化方法中,引入相關(guān)類庫
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";
}
}
}
}
}
銀聯(lián)支付應該是算比較簡單的??!
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php常見數(shù)據(jù)庫操作技巧匯總》、《PHP數(shù)組(Array)操作技巧大全》、《php排序算法總結(jié)》、《PHP常用遍歷算法與技巧總結(jié)》、《PHP數(shù)據(jù)結(jié)構(gòu)與算法教程》、《php程序設(shè)計算法總結(jié)》、《PHP數(shù)學運算技巧總結(jié)》、《php正則表達式用法總結(jié)》、《PHP運算與運算符用法總結(jié)》及《php字符串(string)用法總結(jié)》
希望本文所述對大家PHP程序設(shè)計有所幫助。
相關(guān)文章
php 去除html標記--strip_tags與htmlspecialchars的區(qū)別詳解
本篇文章是對php中去除html標記以及strip_tags與htmlspecialchars的區(qū)別進行了詳細的分析介紹,需要的朋友參考下2013-06-06
PHP寫入WRITE編碼為UTF8的文件的實現(xiàn)代碼
可以把uft-8格式的文件,寫到文本中的實現(xiàn)代碼2008-07-07
PHP 頁面跳轉(zhuǎn)到另一個頁面的多種方法方法總結(jié)
如何在PHP中從一個頁面重定向到另外一個頁面呢?這里列出了三種辦法,供參考。2009-07-07
php使用PDO下exec()函數(shù)查詢執(zhí)行后受影響行數(shù)的方法
這篇文章主要介紹了php使用PDO下exec()函數(shù)查詢執(zhí)行后受影響行數(shù)的方法,結(jié)合實例形式分析了php在使用pdo進行增刪改操作時exec()函數(shù)查詢操作執(zhí)行后受影響行數(shù)的相關(guān)實現(xiàn)技巧與注意事項,需要的朋友可以參考下2017-03-03
php set_time_limit()函數(shù)的使用詳解
本篇文章是對php中的set_time_limit()函數(shù)進行了詳細的分析介紹,需要的朋友參考下2013-06-06

