加入收藏 | 设为首页 | 会员中心 | 我要投稿 汽车网 (https://www.0577qiche.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

例子展示如何开发和实现PHP版本的银联支付接口

发布时间:2023-10-04 10:44:12 所属栏目:PHP教程 来源:
导读:银联支付,首先要注意二重要的部分:

PHP运行环境是5.4.18以上

开了扩展openss

开发手册上面的列子只做参考,因为基本都是错的。你可以试着去官网下一个demo。。。注意现在银联开发,没有测试密钥提供,只能
银联支付,首先要注意二重要的部分:

PHP运行环境是5.4.18以上

开了扩展openss

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

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

/** 
* 银联支付 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-&gt;securityPropFile= $_SERVER['DOCUMENT_ROOT'] . "/ThinkPHP/Extend/Vendor/Netpay/config/security.properties"; //谁知道这是啥,反正他们要我加的 
  $this->b2cPaySend = __APP__."/Index/NetPay/b2cPaySend"; 
  $this-&gt;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-&gt;MerBgUrl, 
    'MerBgUrl' =>$this-&gt;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) &gt; 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 { //Cuoxin.com 
       //支付失败 
         $_SESSION["VERIFY_KEY"] = "fail"; 
     } 
    } 
   } 
 } 

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

(编辑:汽车网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章