php版銀聯(lián)支付接口開發(fā)簡(jiǎn)明教程
本文實(shí)例講述了php版銀聯(lián)支付接口開發(fā)的方法。分享給大家供大家參考,具體如下:
支付接口現(xiàn)在有第三方的支付接口也有銀行的支付接口。這里就來介紹php版本銀聯(lián)支付接口開發(fā)的方法。
銀聯(lián)支付,首先要注意二重要的部分:
PHP運(yùn)行環(huán)境是5.4.18以上
開了擴(kuò)展openssl
開發(fā)手冊(cè)上面的列子只做參考,因?yàn)榛径际清e(cuò)的。你可以試著去官網(wǎng)下一個(gè)demo。。。注意現(xiàn)在銀聯(lián)開發(fā),沒有測(cè)試密鑰提供,只能在正式環(huán)境開發(fā)
下面是我用ThinkPHP編寫的一個(gè)支付類
/**
* 銀聯(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"); //導(dǎo)入加密核心文件夾
vendor('Netpay.util.SecssUtil',"",".class.php"); //導(dǎo)入加密核心文件夾
vendor('Netpay.util.Settings_INI',"",".php"); //導(dǎo)入加密核心文件夾
vendor('Netpay.util.Settings',"",".php"); //導(dǎo)入加密核心文件夾
$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' => '商戶號(hào)',
'MerOrderNo' => '0000001944663232',
'OrderAmt' => '1',
'TranDate' => '20151219',
'TranTime' =>'171248',
'TranType' => '0001',
'BusiType' =>'0001',
'Version' => '20140728',
'CurryNo' => 'CNY',
'AccessType' =>; '0',
'CommodityMsg' => '測(cè)試商品1號(hào)',
'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)支付應(yīng)該是算比較簡(jiǎ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è)計(jì)算法總結(jié)》、《PHP數(shù)學(xué)運(yùn)算技巧總結(jié)》、《php正則表達(dá)式用法總結(jié)》、《PHP運(yùn)算與運(yùn)算符用法總結(jié)》及《php字符串(string)用法總結(jié)》
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。
相關(guān)文章
php 去除html標(biāo)記--strip_tags與htmlspecialchars的區(qū)別詳解
本篇文章是對(duì)php中去除html標(biāo)記以及strip_tags與htmlspecialchars的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
PHP寫入WRITE編碼為UTF8的文件的實(shí)現(xiàn)代碼
可以把uft-8格式的文件,寫到文本中的實(shí)現(xiàn)代碼2008-07-07
PHP 頁面跳轉(zhuǎn)到另一個(gè)頁面的多種方法方法總結(jié)
如何在PHP中從一個(gè)頁面重定向到另外一個(gè)頁面呢?這里列出了三種辦法,供參考。2009-07-07
php使用PDO下exec()函數(shù)查詢執(zhí)行后受影響行數(shù)的方法
這篇文章主要介紹了php使用PDO下exec()函數(shù)查詢執(zhí)行后受影響行數(shù)的方法,結(jié)合實(shí)例形式分析了php在使用pdo進(jìn)行增刪改操作時(shí)exec()函數(shù)查詢操作執(zhí)行后受影響行數(shù)的相關(guān)實(shí)現(xiàn)技巧與注意事項(xiàng),需要的朋友可以參考下2017-03-03
php set_time_limit()函數(shù)的使用詳解
本篇文章是對(duì)php中的set_time_limit()函數(shù)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
PHP判斷是否為空的幾個(gè)函數(shù)對(duì)比
這篇文章主要介紹了PHP判斷是否為空的幾個(gè)函數(shù)對(duì)比,本文講解了gettype()、empty()、is_null()、isset()等幾個(gè)函數(shù)在不同變量下的返回值情況,需要的朋友可以參考下2015-04-04
php中實(shí)現(xiàn)可以返回多個(gè)值的函數(shù)實(shí)例
這篇文章主要介紹了php中實(shí)現(xiàn)可以返回多個(gè)值的函數(shù),實(shí)例分析了php使用數(shù)組返回多個(gè)值的技巧,需要的朋友可以參考下2015-03-03

