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 基于文件头的文件类型验证类函数
May 01 PHP
LotusPhp笔记之:基于ObjectUtil组件的使用分析
May 06 PHP
一些php项目中比较通用的php自建函数的详解
Jun 06 PHP
php导入csv文件碰到乱码问题的解决方法
Feb 10 PHP
使用php转义输出HTML到JavaScript
Mar 27 PHP
typecho插件编写教程(四):插件挂载
May 28 PHP
php从文件夹随机读取文件的方法
Jun 01 PHP
thinkPHP内置字符串截取函数用法详解
Nov 15 PHP
php使用Jpgraph创建3D饼形图效果示例
Feb 15 PHP
PHP使用DOM对XML解析处理操作示例
Jul 04 PHP
解决PHP使用CURL发送GET请求时传递参数的问题
Oct 11 PHP
如何在Mac上通过docker配置PHP开发环境
May 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 批量删除数据的方法分析
2009/10/30 PHP
php使用百度翻译api示例分享
2014/01/31 PHP
php的sprintf函数的用法 控制浮点数格式
2014/02/14 PHP
简单谈谈php中ob_flush和flush的区别
2014/11/27 PHP
PHP htmlentities()函数用法讲解
2019/02/25 PHP
PHP 构造函数和析构函数原理与用法分析
2020/04/21 PHP
jquery随机展示头像代码
2011/12/21 Javascript
seajs1.3.0源码解析之module依赖有序加载
2012/11/07 Javascript
JQuery的$和其它JS发生冲突的快速解决方法
2014/01/24 Javascript
动态加载js的方法汇总
2015/02/13 Javascript
JavaScript函数详解
2015/02/27 Javascript
SpringMVC restful 注解之@RequestBody进行json与object转换
2015/12/10 Javascript
JS实现随页面滚动显示/隐藏窗口固定位置元素
2016/02/26 Javascript
浅谈JS继承_寄生式继承 &amp; 寄生组合式继承
2016/08/16 Javascript
javascript笔记之匿名函数和闭包
2017/02/06 Javascript
详解Ubuntu安装angular-cli遇到的坑
2018/09/08 Javascript
js原生map实现的方法总结
2020/01/19 Javascript
[01:59][TI9趣味视频] 全明星赛奖励
2019/08/23 DOTA
进一步理解Python中的函数编程
2015/04/13 Python
python利用rsa库做公钥解密的方法教程
2017/12/10 Python
基于Python实现的ID3决策树功能示例
2018/01/02 Python
python3.5安装python3-tk详解
2019/04/26 Python
Python企业编码生成系统总体系统设计概述
2019/07/26 Python
python实现读取excel文件中所有sheet操作示例
2019/08/09 Python
基于python的selenium两种文件上传操作实现详解
2019/09/19 Python
python实现XML解析的方法解析
2019/11/16 Python
python通过opencv实现图片裁剪原理解析
2020/01/19 Python
pycharm + django跨域无提示的解决方法
2020/12/06 Python
Django中的DateTimeField和DateField实现
2021/02/24 Python
css3实现二维码扫描特效的示例
2020/10/29 HTML / CSS
医学专业毕业生推荐信
2013/11/14 职场文书
《水乡歌》教学反思
2014/04/24 职场文书
万里长城导游词
2015/01/30 职场文书
2015年中秋节活动总结
2015/03/23 职场文书
php远程请求CURL案例(爬虫、保存登录状态)
2021/04/01 PHP
Redis延迟队列和分布式延迟队列的简答实现
2021/05/13 Redis