当前位置:首页 > PHP教程 > php高级应用 > 列表

php版本银联支付接口开发实例

发布:smiling 来源: PHP粉丝网  添加日期:2018-10-30 09:49:38 浏览: 评论:0 

银联支付,首先要注意二重要的部分:

PHP运行环境是5.4.18以上

开了扩展openss

开发手册上面的列子只做参考,因为基本都是错的。你可以试着去官网下一个demo。。。注意现在银联开发,没有测试密钥提供,只能在正式环境开发【20151219】

下面是我用ThinkPHP编写的一个支付类

  1. /** 
  2. * 银联支付 v0.1 
  3. * @auther:Summer<dengwz7788@gmail.com>; 
  4. * @date:20151202 
  5. * **/ 
  6.  
  7. class NetPayAction extends BaseAction{ 
  8. //在类初始化方法中,引入相关类库 
  9. public function _initialize() { 
  10.   header("Content-type:text/html;charset=utf-8"); 
  11.   vendor('Netpay.util.common',"",".php"); //导入加密核心文件夹 
  12.   vendor('Netpay.util.SecssUtil',"",".class.php"); //导入加密核心文件夹 
  13.   vendor('Netpay.util.Settings_INI',"",".php"); //导入加密核心文件夹 
  14.   vendor('Netpay.util.Settings',"",".php"); //导入加密核心文件夹 
  15.   $this-&gt;securityPropFile= $_SERVER['DOCUMENT_ROOT'] . "/ThinkPHP/Extend/Vendor/Netpay/config/security.properties"; //谁知道这是啥,反正他们要我加的 
  16.   $this->b2cPaySend = __APP__."/Index/NetPay/b2cPaySend"; 
  17.   $this-&gt;b2cRefundSend = __APP__."/Index/NetPay/b2cRefundSend"; 
  18.   $this->b2cQuerySend = __APP__."/Index/NetPay/b2cQuerySend"; 
  19.   $this->;MerBgUrl = __APP__."/Index/NetPay/MerBgUrl"; 
  20.   $this->MerPageUrl = __APP__."/Index/NetPay/MerPageUrl"; 
  21. } 
  22.  
  23. public function index() 
  24. { 
  25.   $paramArray=array ( 
  26.      'MerId' => '商户号', 
  27.      'MerOrderNo' => '0000001944663232', 
  28.      'OrderAmt' => '1', 
  29.      'TranDate' => '20151219', 
  30.     'TranTime' =>'171248', 
  31.     'TranType' => '0001', 
  32.     'BusiType' =>'0001', 
  33.     'Version' => '20140728', 
  34.     'CurryNo' => 'CNY', 
  35.     'AccessType' =>; '0', 
  36.     'CommodityMsg' => '测试商品1号', 
  37.     'MerPageUrl' => $this-&gt;MerBgUrl, 
  38.     'MerBgUrl' =>$this-&gt;MerPageUrl, 
  39.     'MerResv' => 'MerResv', 
  40.  ); 
  41.    
  42.  if (count($paramArray) >0) { 
  43.     $dispatchUrl = $this->b2cPaySend; 
  44.     $transResvedJson = array(); 
  45.     $cardInfoJson = array(); 
  46.     $sendMap = array(); 
  47.      foreach ($paramArray as $key => $value) { 
  48.       if (isEmpty($value)) { 
  49.         continue; 
  50.      } 
  51.      if (startWith($key, "trans_")) { 
  52.           $key = substr($key, strlen("trans_")); 
  53.                 $transResvedJson[$key] = $value; 
  54.      } else 
  55.          if (startWith($key, "card_")) { 
  56.               $key = substr($key, strlen("card_")); 
  57.               $cardInfoJson[$key] = $value; 
  58.          } else { 
  59.               $sendMap[$key] = $value; 
  60.          } 
  61.    } 
  62.  
  63.    $transResvedStr = null; 
  64.    $cardResvedStr = null; 
  65.    if (count($transResvedJson) >0) { 
  66.       $transResvedStr = json_encode($transResvedJson); 
  67.    } 
  68.    if (count($cardInfoJson) &gt; 0) { 
  69.       $cardResvedStr = json_encode($cardInfoJson); 
  70.    } 
  71.  
  72.   $secssUtil = new SecssUtil(); 
  73.   if (! isEmpty($transResvedStr)) { 
  74.     $transResvedStr = $secssUtil->decryptData($transResvedStr); 
  75.     $sendMap["TranReserved"] = $transResvedStr; 
  76.    } 
  77.   if (! isEmpty($cardResvedStr)) { 
  78.      $cardResvedStr = $secssUtil->decryptData($cardResvedStr); 
  79.      $sendMap["card_"] = $cardResvedStr; 
  80.    } 
  81.    $securityPropFile = $this>securityPropFile; 
  82.    $secssUtil->init($securityPropFile); 
  83.    $secssUtil->sign($sendMap); 
  84.  
  85.    $sendMap["Signature"] = $secssUtil->getSign(); 
  86.    $_SESSION = $sendMap; 
  87.    header("Location:" . $dispatchUrl); 
  88.  } 
  89. } 
  90.  
  91. public function b2cPaySend(){ 
  92.    layout(false); 
  93.    $settings = new Settings_INI(); 
  94.    $settings->oad($this->securityPropFile); 
  95.    $pay_url = "https://payment.chinapay.com/CTITS/service/rest/page/nref/000000000017/0/0/0/0/0"; 
  96.    $html = "<form name='payment' action='{$pay_url}' method='POST' target='_blank'>;"; 
  97.    $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"; 
  98.    foreach ($_SESSION as $k =>$v) { 
  99.       if (strstr($params, $k)) { 
  100.          $html .= "<input type='hidden' name = '" . $k . "' value ='" . $v . "'/>"; 
  101.       } 
  102.    } 
  103.  
  104.         $html .= "<nput type='button' type='hidden' value='提交订单' >"; 
  105.         $html .= "<;/from>"; 
  106.         $this->html = $html; 
  107.         $this->display(); 
  108. } 
  109.  
  110. public function pgReturn(){ 
  111.   if ($_POST) { 
  112.       if (count($_POST) > 0) { 
  113.        $secssUtil = new SecssUtil(); 
  114.        $securityPropFile = $this>securityPropFile; 
  115.        $secssUtil->init($securityPropFile); 
  116.        $text = array(); 
  117.        foreach($_POST as $key=>$value){ 
  118.            $text[$key] = urldecode($value); 
  119.         } 
  120.  
  121.       if ($secssUtil->verify($text)) { 
  122.                        //支付成功 
  123.           $_SESSION["VERIFY_KEY"] = "success"; 
  124.      } else { //phpfensi.com 
  125.        //支付失败 
  126.          $_SESSION["VERIFY_KEY"] = "fail"; 
  127.      } 
  128.     } 
  129.    } 
  130.  } 
  131. } 

银联支付应该是算比较简单的!!

感觉银联的支付接口比支付宝的还简单好用了,当然每个考虑到的东西不一样哦,上面只是开个玩笑的哦.

Tags: php版本 php银联支付

分享到: