银联电子支付 php chinapay

转载 2017年01月03日 18:08:38

之前看我博客百度关键字的时候,很多人都是因为银联搜到我这里,一直想做一个demo 给大家,可惜没商户申请不到,这次机缘巧合帮朋友做支付三部曲:微信支付,支付宝支付和银联支付,其他两个支付都烂大街的,这里就只把银联支付分享给大家,因为涉及到客户的信息,所以就不提供源代码下载了。

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

  1. PHP运行环境是5.4.18以上
  2. 开了扩展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 {
       //支付失败
         $_SESSION["VERIFY_KEY"] = "fail";
     }
    }
   }
 }
}

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

thinkphp3.2整合银联手机网页支付

1.和银联签约,签约成功之后才进行技术集成,到银联官方下载手机网页支付的技术文档和demo代码; https://open.unionpay.com/ajweb/help/file/techFile?...

thinkphp集成银联网关支付简单实例

thinkphp集成银联手机网关支付简单准备工作 网银手机网关支付产品开发包下载: https://open.unionpay.com/ajweb/help/file/toDetailPage?id...

php最新银联支付chinaPay,最新接口地址

需要下载这2个文件 再拿到公钥和秘钥 netpayclient_config.php netpayclient.php 目录结构 : 核心代码ChinaPay.php: ...

上海银联chinapay支付接口实现详解

header('Content-type: text/html; charset=gbk'); include_once("netpayclient_config.php"); ?> 支付交易 ...

ChinaPay 支付接口接入 案例

前一段时间,系统需要接入在线支付。其中就有ChinaPay.我的商城是asp.net(C#)编写。chinapay 采用了数字签名的方式来验证数据。 1:必须的东西 上面这些东西都是商务谈定以后,由c...

大鱼海棠8 银联电子支付报文说明

请求报文 Version    版本号 MerId    商户号 MerOrderNo    必填,变长 32位,同一商户同一交易日期内不可重复 TranDate    商户提交交易的日期,例...

PHP-Java-Bridge实现使php完美支持中国银联(chinapay)支付接口

折腾了3天,终于把中国银联的接口
  • qinzhw
  • qinzhw
  • 2014年08月11日 10:35
  • 1407

银联 chinapay php版本库文件netpayclient php在php5 4以上版本中提示hex2bin 重定义

今天用ecshop时,发现了这个问题。  经过解码, 完美解决问题。  贴出解码代码,以供参考。 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:银联电子支付 php chinapay
举报原因:
原因补充:

(最多只允许输入30个字)