php版银联支付接口开发简明教程
本文实例讲述了php版银联支付接口开发的方法。分享给大家供大家参考,具体如下:
支付接口现在有第三方的支付接口也有银行的支付接口。这里就来介绍php版本银联支付接口开发的方法。
银联支付,首先要注意二重要的部分:
PHP运行环境是5.4.18以上
开了扩展openssl
开发手册上面的列子只做参考,因为基本都是错的。你可以试着去官网下一个demo。。。注意现在银联开发,没有测试密钥提供,只能在正式环境开发
下面是我用ThinkPHP编写的一个支付类
/** *银联支付v0.1 *@auther:Summer<dengwz7788@gmail.com>; *@date:20151202 ***/ classNetPayActionextendsBaseAction{ //在类初始化方法中,引入相关类库 publicfunction_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"; } publicfunctionindex() { $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($paramArrayas$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=newSecssUtil(); 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); } } publicfunctionb2cPaySend(){ layout(false); $settings=newSettings_INI(); $settings->oad($this->securityPropFile); $pay_url="https://payment.chinapay.com/CTITS/service/rest/page/nref/000000000017/0/0/0/0/0"; $html="<formname='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($_SESSIONas$k=>$v){ if(strstr($params,$k)){ $html.="<inputtype='hidden'name='".$k."'value='".$v."'/>"; } } $html.="<nputtype='button'type='hidden'value='提交订单'>"; $html.="<;/from>"; $this->html=$html; $this->display(); } publicfunctionpgReturn(){ if($_POST){ if(count($_POST)>0){ $secssUtil=newSecssUtil(); $securityPropFile=$this>securityPropFile; $secssUtil->init($securityPropFile); $text=array(); foreach($_POSTas$key=>$value){ $text[$key]=urldecode($value); } if($secssUtil->verify($text)){ //支付成功 $_SESSION["VERIFY_KEY"]="success"; }else{ //支付失败 $_SESSION["VERIFY_KEY"]="fail"; } } } } }
银联支付应该是算比较简单的!!
更多关于PHP相关内容感兴趣的读者可查看本站专题:《php常见数据库操作技巧汇总》、《PHP数组(Array)操作技巧大全》、《php排序算法总结》、《PHP常用遍历算法与技巧总结》、《PHP数据结构与算法教程》、《php程序设计算法总结》、《PHP数学运算技巧总结》、《php正则表达式用法总结》、《PHP运算与运算符用法总结》及《php字符串(string)用法总结》
希望本文所述对大家PHP程序设计有所帮助。