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 相关文章推荐
基于mysql的bbs设计(五)
Oct 09 PHP
用session做客户验证时的注意事项
Oct 09 PHP
xss防御之php利用httponly防xss攻击
Mar 21 PHP
PHP魔术引号所带来的安全问题分析
Jul 15 PHP
PHP中使用SimpleXML检查XML文件结构实例
Jan 07 PHP
PHP下使用mysqli的函数连接mysql出现warning: mysqli::real_connect(): (hy000/1040): ...
Feb 14 PHP
ThinkPHP框架里隐藏index.php
Apr 12 PHP
PHP设计模式之工厂模式与单例模式
Sep 28 PHP
PHP判断表达式中括号是否匹配的简单实例
Oct 22 PHP
Laravel框架路由设置与使用示例
Jun 12 PHP
PHP PDOStatement::setAttribute讲解
Feb 01 PHP
php+Ajax无刷新验证用户名操作实例详解
Mar 04 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
处理单名多值表单的详解
2013/06/08 PHP
菜鸟javascript基础整理1
2010/12/06 Javascript
javascript中的作用域scope介绍
2010/12/28 Javascript
jQuery参数列表集合
2011/04/06 Javascript
cument.execCommand()用法深入理解
2012/12/04 Javascript
javascript变量作用域使用中常见错误总结
2013/03/26 Javascript
改变隐藏的input中value的值代码
2013/12/30 Javascript
js拼接html注意问题示例探讨
2014/07/14 Javascript
js实现仿百度瀑布流的方法
2015/02/05 Javascript
jquery实现兼容IE8的异步上传文件
2015/06/15 Javascript
jQuery动画效果图片轮播特效
2016/01/12 Javascript
JS遍历数组及打印数组实例分析
2016/01/21 Javascript
Bootstrap组件系列之福利篇几款好用的组件(推荐)
2016/06/23 Javascript
jQuery包裹节点用法完整示例
2016/09/13 Javascript
JavaScript学习笔记整理_用于模式匹配的String方法
2016/09/19 Javascript
JavaScript实现的搜索及高亮显示功能示例
2017/08/14 Javascript
Node.js使用Express.Router的方法
2017/11/14 Javascript
VueJs 将接口用webpack代理到本地的方法
2017/11/27 Javascript
详解nodejs解压版安装和配置(带有搭建前端项目脚手架)
2018/12/06 NodeJs
微信小程序视图控件与bindtap之间的问题的解决
2019/04/08 Javascript
nuxt踩坑之Vuex状态树的模块方式使用详解
2019/09/06 Javascript
详解Nuxt.js中使用Element-UI填坑
2019/09/06 Javascript
JS出现404错误原理及解决方案
2020/07/01 Javascript
[04:20]DOTA2-DPC中国联赛 正赛 VG vs LBZS 选手采访 1月19日
2021/03/11 DOTA
Python批量修改文件后缀的方法
2014/01/26 Python
Window环境下Scrapy开发环境搭建
2018/11/18 Python
python将字典列表导出为Excel文件的方法
2019/09/02 Python
使用Python的Turtle绘制哆啦A梦实例
2019/11/21 Python
python scrapy重复执行实现代码详解
2019/12/28 Python
Python+PyQt5+MySQL实现天气管理系统
2020/06/16 Python
Foot Locker意大利官网:全球领先的运动鞋和服装零售商
2017/05/30 全球购物
开业主持词
2014/03/21 职场文书
国际贸易求职信
2014/07/05 职场文书
大学生学习新党章思想汇报
2014/10/25 职场文书
个人工作保证书
2015/02/28 职场文书
彩虹社八名人气艺人全新周边限时推出,性转女装男装一次拥有!
2022/04/01 日漫