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 相关文章推荐
多重?l件?合查?(二)
Oct 09 PHP
PHP图片处理类 phpThumb参数用法介绍
Mar 11 PHP
实现PHP多线程异步请求的3种方法
Jan 17 PHP
php生成静态页面的简单示例
Apr 17 PHP
在PHP中使用X-SendFile头让文件下载更快
Jun 01 PHP
用 Composer构建自己的 PHP 框架之基础准备
Oct 30 PHP
php数组转成json格式的方法
Mar 09 PHP
使用GD库生成带阴影文字的图片
Mar 27 PHP
PHP CURL 多线程操作代码实例
May 13 PHP
PHP实现动态获取函数参数的方法示例
Apr 02 PHP
PHP实现的用户注册表单验证功能简单示例
Feb 25 PHP
基于PHP实现解密或加密Cloudflar邮箱保护
Jun 24 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中call_user_func_array()函数的用法演示
2012/02/05 PHP
基于PHP选项与信息函数的使用详解
2013/05/10 PHP
php创建session的方法实例详解
2015/01/27 PHP
Javascript Cookie读写删除操作的函数
2010/03/02 Javascript
javascript window.opener的用法分析
2010/04/07 Javascript
JavaScript 放大镜 放大倍率和视窗尺寸
2011/05/09 Javascript
firefox下jquery ajax返回object XMLDocument处理方法
2014/01/26 Javascript
使用js判断当前时区TimeZone是否是夏令时
2014/02/23 Javascript
黑帽seo劫持程序,js劫持搜索引擎代码
2015/09/15 Javascript
Javascript复制实例详解
2016/01/28 Javascript
javascript实现延时显示提示框特效代码
2016/04/27 Javascript
在IE8上JS实现combobox支持拼音检索功能
2016/05/23 Javascript
jQuery编写设置和获取颜色的插件
2017/01/09 Javascript
bootstrap IE8 兼容性处理
2017/03/22 Javascript
详解HTTPS 的原理和 NodeJS 的实现
2017/07/04 NodeJs
vue 自定义组件 v-model双向绑定、 父子组件同步通信的多种写法
2017/11/27 Javascript
jQuery实现验证表单密码一致性及正则表达式验证邮箱、手机号的方法
2017/12/05 jQuery
Vue+webpack项目基础配置教程
2018/02/12 Javascript
详解使用jQuery.i18n.properties实现js国际化
2018/05/04 jQuery
vue 兄弟组件的信息传递的方法实例详解
2019/08/30 Javascript
python计数排序和基数排序算法实例
2014/04/25 Python
Python实现命令行通讯录实例教程
2016/08/18 Python
Python实现连接postgresql数据库的方法分析
2017/12/27 Python
详解Python with/as使用说明
2018/12/13 Python
Django Sitemap 站点地图的实现方法
2019/04/29 Python
python 搜索大文件的实例代码
2019/07/08 Python
使用py-spy解决scrapy卡死的问题方法
2020/09/29 Python
室内设计专业学生的自我评价分享
2013/11/27 职场文书
国际贸易专业个人职业生涯规划
2014/02/15 职场文书
房屋转让协议书
2014/04/11 职场文书
水电维修专业推荐信
2014/09/06 职场文书
护士医德医风自我评价
2014/09/15 职场文书
先进个人自荐书
2015/03/06 职场文书
获奖感言一句话
2015/07/31 职场文书
2016年第29个世界无烟日宣传活动总结
2016/04/06 职场文书
关于Python使用turtle库画任意图的问题
2022/04/01 Python