php版银联支付接口开发简明教程


Posted in PHP onOctober 14, 2016

本文实例讲述了php版银联支付接口开发的方法。分享给大家供大家参考,具体如下:

支付接口现在有第三方的支付接口也有银行的支付接口。这里就来介绍php版本银联支付接口开发的方法。

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

PHP运行环境是5.4.18以上

开了扩展openssl

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

下面是我用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->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' => '商户号',
   '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 ($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";
   }
  }
  }
 }
}

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

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP企业级应用之常见缓存技术篇
Jan 27 PHP
php截取后台登陆密码的代码
May 05 PHP
浅析linux下apache服务器的配置和管理
Aug 10 PHP
php根据操作系统转换文件名大小写的方法
Feb 24 PHP
php实现文件下载功能的几个代码分享
May 10 PHP
php在apache环境下实现gzip配置方法
Apr 02 PHP
利用PHPStorm如何开发Laravel应用详解
Aug 30 PHP
thinkPHP中钩子的使用方法实例分析
Nov 16 PHP
php中通用的excel导出方法实例
Dec 30 PHP
php+layui数据表格实现数据分页渲染代码
Oct 26 PHP
Laravel如何实现适合Api的异常处理响应格式
Jun 14 PHP
Thinkphp5+Redis实现商品秒杀代码实例讲解
Dec 29 PHP
PHP二进制与字符串之间的相互转换教程
Oct 14 #PHP
php基于curl主动推送最新内容给百度收录的方法
Oct 14 #PHP
thinkphp分页实现效果
Oct 13 #PHP
php实现图片以base64显示的方法
Oct 13 #PHP
php实现将base64格式图片保存在指定目录的方法
Oct 13 #PHP
thinkphp隐藏index.php/home并允许访问其他模块的实现方法
Oct 13 #PHP
Mac版PhpStorm之XAMPP整合apache服务器配置的图文教程详解
Oct 13 #PHP
You might like
PHP操作xml代码
2010/06/17 PHP
Could not load type System.ServiceModel.Activation.HttpModule解决办法
2012/12/29 PHP
详解PHP的Yii框架中扩展的安装与使用
2016/04/01 PHP
php自动提交表单的方法(基于fsockopen与curl)
2016/05/09 PHP
php fread读取文件注意事项
2016/09/24 PHP
浅析PHP开发规范
2018/02/05 PHP
js判断浏览器的比较全的代码
2007/02/13 Javascript
为jQuery添加Webkit的触摸的方法分享
2014/02/02 Javascript
JavaScript获取指定元素位置的方法
2015/04/08 Javascript
老生常谈遮罩层 滚动条的问题
2016/04/29 Javascript
jQuery Easyui学习教程之实现datagrid在没有数据时显示相关提示内容
2016/07/09 Javascript
总结Javascript中数组各种去重的方法
2016/10/04 Javascript
微信小程序 vidao实现视频播放和弹幕的功能
2016/11/02 Javascript
ES6新特性五:Set与Map的数据结构实例分析
2017/04/21 Javascript
vue 2.0路由之路由嵌套示例详解
2017/05/08 Javascript
vue系列之动态路由详解【原创】
2017/09/10 Javascript
jQuery实现的导航条点击后高亮显示功能示例
2019/03/04 jQuery
Python创建日历实例
2014/08/21 Python
Python的净值数据接口调用示例分享
2016/03/15 Python
Python操作Excel之xlsx文件
2017/03/24 Python
Django中STATIC_ROOT和STATIC_URL及STATICFILES_DIRS浅析
2018/05/08 Python
根据DataFrame某一列的值来选择具体的某一行方法
2018/07/03 Python
Django添加sitemap的方法示例
2018/08/06 Python
对Pytorch中Tensor的各种池化操作解析
2020/01/03 Python
python GUI库图形界面开发之PyQt5菜单栏控件QMenuBar的详细使用方法与实例
2020/02/28 Python
python GUI库图形界面开发之PyQt5滑块条控件QSlider详细使用方法与实例
2020/02/28 Python
Python爬虫实现HTTP网络请求多种实现方式
2020/06/19 Python
Carrs Silver官网:英国著名的银器品牌
2020/08/29 全球购物
出口公司经理求职简历中的自我评价
2013/10/13 职场文书
初三政治教学反思
2014/01/30 职场文书
学校宣传标语
2014/06/18 职场文书
安全生产目标管理责任书
2014/07/25 职场文书
绿色校园广播稿
2014/10/13 职场文书
死亡赔偿协议书
2015/01/28 职场文书
自主招生自荐信格式范文
2015/03/25 职场文书
2015年学校政教处工作总结
2015/05/26 职场文书