CodeIgniter开发实现支付宝接口调用的方法示例


Posted in PHP onNovember 14, 2016

本文实例讲述了CodeIgniter开发实现支付宝接口调用的方法。分享给大家供大家参考,具体如下:

准备:

1、alipay官方下载最新接口类库
2、解压后,将目录"\即时到账交易接口-create_direct_pay_by_user\demo\create_direct_pay_by_user-PHP-UTF-8\lib"复制到 application\third_party目录下,并改名lib为alipay
3、同样复制cacert.pem文件到"application\third_party\alipay"目录下,这个不是必须的,在走ssl通道时用到的证书

代码实例:

以下只列出controller部分代码,view与model根据自己实际需要去编写

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
 * alipy支付接口
 * @author onwulc@163.com
 *
 */
class Alipay extends CI_Controller {
  private $alipay_config;
  function __construct(){
    parent::__construct();
    $this->_init_config();
    $this->load->helper('url');
  }
  function index(){
    $this->load->view('alipay');//装载支付视图页面,post到do_alipay
  }
  function do_alipay(){
    require_once(APPPATH.'third_party/alipay/alipay_submit.class.php');
    //构造要请求的参数数组,无需改动
    $parameter = array(
      "service" => "create_direct_pay_by_user",
      "partner" => trim($this->alipay_config['partner']),
      "payment_type"  => '1',
      "notify_url"  => site_url('alipay/do_notify'),
      "return_url"  => site_url('alipay/do_return'),
      "seller_email"  => trim($this->alipay_config['seller_emaill']),//支付宝帐户,
      "out_trade_no"  => $this->input->post('WIDout_trade_no'),//商户订单号
      "subject"  => $this->input->post('WIDsubject'),//订单名称
      "total_fee"  => $this->input->post('WIDtotal_fee'),//必填,付款金额
      "body"  => $this->input->post('WIDbody'),//必填,订单描述
      "show_url"  => $this->input->post('WIDshow_url'),//商品展示地址
      "anti_phishing_key"  => '',//防钓鱼时间戳
      "exter_invoke_ip"  => '',//客户端的IP地址
      "_input_charset"  => trim(strtolower($this->alipay_config['input_charset']))
    );
    //建立请求
    $alipaySubmit = new AlipaySubmit($this->alipay_config);
    $html_text = $alipaySubmit->buildRequestForm($parameter,"get", "确认");
    echo $html_text;
  }
  function do_notify(){
    require_once(APPPATH.'third_party/alipay/alipay_notify.class.php');
  }
  function do_return(){
    require_once(APPPATH.'third_party/alipay/alipay_notify.class.php');
    $alipayNotify = new AlipayNotify($this->alipay_config);
    $verify_result = $alipayNotify->verifyReturn();
    //商户订单号
    $out_trade_no = $_GET['out_trade_no'];
    //支付宝交易号
    $trade_no = $_GET['trade_no'];
    //交易状态
    $trade_status = $_GET['trade_status'];
    if($_GET['trade_status'] == 'TRADE_FINISHED' || $_GET['trade_status'] == 'TRADE_SUCCESS') {
      //判断该笔订单是否在商户网站中已经做过处理
      //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
      //如果有做过处理,不执行商户的业务程序
      echo '支付成功,交易处理环节';
    }else {
      echo "trade_status=".$_GET['trade_status'];
    }
    echo "验证成功<br />";
  }
  /**
   * 初始化支付宝配置,详细参数请根据自己实际接口修改
   */
  private function _init_config(){
    //支付宝帐户
    $alipay_config['seller_emaill'] = ''; 
    //合作身份者id,以2088开头的16位纯数字
    $alipay_config['partner'] = '2088999999999999';
    //安全检验码,以数字和字母组成的32位字符
    $alipay_config['key'] = 'vhyjvdht3ayxbtx692vlkbwilhXXXXXX';
    //签名方式 不需修改
    $alipay_config['sign_type'] = strtoupper('MD5');
    //字符编码格式 目前支持 gbk 或 utf-8
    $alipay_config['input_charset'] = strtolower('utf-8');
    //ca证书路径地址,用于curl中ssl校验
    //请保证cacert.pem文件在当前文件夹目录中
    $alipay_config['cacert'] = APPPATH.'third_party/alipay/cacert.pem';
    //访问模式,根据自己的服务器是否支持ssl访问,若支持请选择https;若不支持请选择http
    $alipay_config['transport'] = 'http';
    $this->alipay_config = $alipay_config;
  }
}

希望本文所述对大家基于CodeIgniter框架的PHP程序设计有所帮助。

PHP 相关文章推荐
PHP的一个基础知识 表单提交
Jul 04 PHP
PHP中替换换行符的几种方法小结
Oct 15 PHP
PHP中date与gmdate的区别及默认时区设置
May 12 PHP
php中in_array函数用法探究
Nov 25 PHP
PHP表单提交后引号前自动加反斜杠的原因及三种办法关闭php魔术引号
Sep 30 PHP
为你总结一些php系统类函数
Oct 21 PHP
php添加数据到xml文件的简单例子
Sep 08 PHP
php 将json格式数据转换成数组的方法
Aug 21 PHP
php curl获取https页面内容,不直接输出返回结果的设置方法
Jan 15 PHP
laravel Model 执行事务的实现
Oct 10 PHP
PHP PDO和消息队列的个人理解与应用实例分析
Nov 25 PHP
php+mysql实现的无限分类方法类定义与使用示例
May 27 PHP
PHP实现无限分类的实现方法
Nov 14 #PHP
php mysql获取表字段名称和字段信息的三种方法
Nov 13 #PHP
PHP编写daemon process 实例详解
Nov 13 #PHP
php版微信小店API二次开发及使用示例
Nov 12 #PHP
PHP Mysqli 常用代码集合
Nov 12 #PHP
PHP版微信小店接口开发实例
Nov 12 #PHP
PHP错误和异常处理功能模块示例
Nov 12 #PHP
You might like
php小技巧之过滤ascii控制字符
2014/05/14 PHP
Codeigniter检测表单post数据的方法
2015/03/21 PHP
PHP中SQL查询语句的id=%d解释(推荐)
2016/12/10 PHP
PHP实现长轮询消息实时推送功能代码实例讲解
2021/02/26 PHP
JSON语法五大要素图文介绍
2012/12/04 Javascript
JS localStorage实现本地缓存的方法
2013/06/22 Javascript
javascript操作table(insertRow,deleteRow,insertCell,deleteCell方法详解)
2013/12/16 Javascript
初始Nodejs
2014/11/08 NodeJs
JavaScript设计模式之建造者模式介绍
2014/12/28 Javascript
jQuery DOM删除节点操作指南
2015/03/03 Javascript
JS实现的鼠标跟随代码(卡通手型点击效果)
2015/10/26 Javascript
[原创]Javascript 实现广告后加载 可加载百度谷歌联盟广告
2016/05/11 Javascript
jQuery插件zTree实现单独选中根节点中第一个节点示例
2017/03/08 Javascript
详解webpack es6 to es5支持配置
2017/05/04 Javascript
JavaScript实现无穷滚动加载数据
2017/05/06 Javascript
vue系列之动态路由详解【原创】
2017/09/10 Javascript
Vue.js 图标选择组件实践详解
2018/12/03 Javascript
关于angular浏览器兼容性问题的解决方案
2020/07/26 Javascript
js节流防抖应用场景,以及在vue中节流防抖的具体实现操作
2020/09/21 Javascript
vant中的toast层级改变操作
2020/11/04 Javascript
Python常用的日期时间处理方法示例
2015/02/08 Python
python实现自动发送邮件发送多人、群发、多附件的示例
2018/01/23 Python
python3 遍历删除特定后缀名文件的方法
2018/04/23 Python
Python简单获取二维数组行列数的方法示例
2018/12/21 Python
对python判断是否回文数的实例详解
2019/02/08 Python
Python3 itchat实现微信定时发送群消息的实例代码
2019/07/12 Python
pytorch标签转onehot形式实例
2020/01/02 Python
python代码如何注释
2020/06/01 Python
pycharm 复制代码出现空格的解决方式
2021/01/15 Python
世界各地的当地人的食物体验:Eatwith
2019/07/26 全球购物
How to spawning asynchronous work in J2EE
2016/08/29 面试题
中间件的定义
2016/08/09 面试题
应届生简历自我评价
2015/03/11 职场文书
宾馆前台接待岗位职责
2015/04/02 职场文书
详解nginx.conf 中 root 目录设置问题
2021/04/01 Servers
如何使用PostgreSQL进行中文全文检索
2021/05/27 PostgreSQL