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+xslt在windows平台上
Oct 09 PHP
PHP 单引号与双引号的区别
Nov 24 PHP
PHP系列学习之日期函数使用介绍
Aug 18 PHP
解析PHP将对象转换成数组的方法(兼容多维数组类型)
Jun 21 PHP
php面向对象中的魔术方法中文说明
Mar 04 PHP
ThinkPHP3.1新特性之动态设置自动完成和自动验证示例
Jun 19 PHP
PHP生成不重复随机数的方法汇总
Nov 19 PHP
phpStudy配置多站点多域名方法及遇到的403错误解决方法
Oct 19 PHP
PHP获取当前系统时间的方法小结
Oct 03 PHP
Swoole 5将移除自动添加Event::wait()特性详解
Jul 10 PHP
php报错502badgateway解决方法
Oct 11 PHP
php判断IP地址是否在多个IP段内
Aug 18 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检测图片木马多进制编程实践
2013/04/11 PHP
php+ajax实现无刷新的新闻留言系统
2020/12/21 PHP
深入理解PHP之源码目录结构与功能说明
2016/06/01 PHP
php实现的SSO单点登录系统接入功能示例分析
2016/10/12 PHP
解决laravel session失效的问题
2019/10/14 PHP
5款Javascript颜色选择器
2009/10/25 Javascript
JS俄罗斯方块,包含完整的设计理念
2010/12/11 Javascript
Grid得到选择行数据的方法总结
2011/01/17 Javascript
各浏览器对link标签onload/onreadystatechange事件支持的差异分析
2011/04/27 Javascript
JavaScript面向对象(极简主义法minimalist approach)
2012/07/17 Javascript
JS 实现Table相同行的单元格自动合并示例代码
2013/08/27 Javascript
AngularJS入门教程之AngularJS模型
2016/04/18 Javascript
jQuery防止重复绑定事件的解决方法
2016/05/14 Javascript
Vue.js实现一个自定义分页组件vue-paginaiton
2016/09/05 Javascript
Vue Transition实现类原生组件跳转过渡动画的示例
2017/08/19 Javascript
vue axios同步请求解决方案
2017/09/29 Javascript
详解vue2.0+vue-video-player实现hls播放全过程
2018/03/02 Javascript
解决vue 格式化银行卡(信用卡)每4位一个符号隔断的问题
2018/09/14 Javascript
jquery实现点击弹出对话框
2020/02/08 jQuery
node.js +mongdb实现登录功能
2020/06/18 Javascript
Python中实现远程调用(RPC、RMI)简单例子
2014/04/28 Python
基于Python的身份证号码自动生成程序
2014/08/15 Python
利用Python实现图书超期提醒
2016/08/02 Python
关于python的list相关知识(推荐)
2017/08/30 Python
关于pytorch中网络loss传播和参数更新的理解
2019/08/20 Python
Python操作Elasticsearch处理timeout超时
2020/07/17 Python
python更新数据库中某个字段的数据(方法详解)
2020/11/18 Python
python反扒机制的5种解决方法
2021/02/06 Python
详解HTML5中的拖放事件(Drag 和 drop)
2016/11/14 HTML / CSS
澳大利亚最大的女装零售商:Millers
2017/09/10 全球购物
瑜伽国际:Yoga International
2018/04/18 全球购物
西部世纪面试题
2014/12/05 面试题
优秀研究生自我鉴定
2013/12/04 职场文书
学生期末评语大全
2014/04/30 职场文书
一份文言文检讨书
2014/09/13 职场文书
python如何将mat文件转为png
2022/07/15 Python