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 相关文章推荐
简单易用的计数器(数据库)
Oct 09 PHP
给php新手谈谈我的学习心得
Feb 25 PHP
利用static实现表格的颜色隔行显示的代码
Sep 02 PHP
PHP 多维数组的排序问题 根据二维数组中某个项排序
Nov 09 PHP
php获取服务器信息的实现代码
Feb 04 PHP
php调用nginx的mod_zip模块打包ZIP文件
Jun 11 PHP
PHP内置过滤器FILTER使用实例
Jun 25 PHP
php出现内存位置访问无效错误问题解决方法
Aug 16 PHP
PHP的Yii框架中使用数据库的配置和SQL操作实例教程
Mar 17 PHP
PHP实现的简单异常处理类示例
May 04 PHP
php从数据库中读取特定的行(实例)
Jun 02 PHP
wordpress自定义标签云与随机获取标签的方法详解
Mar 22 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
文件上传类
2006/10/09 PHP
php中的数组操作函数整理
2008/08/18 PHP
Yii不依赖Model的表单生成器用法实例
2014/12/04 PHP
2014最热门的24个php类库汇总
2014/12/18 PHP
php通过array_push()函数添加多个变量到数组末尾的方法
2015/03/18 PHP
PHP判断一个字符串是否是回文字符串的方法
2015/03/23 PHP
帝国cms常用标签汇总
2015/07/06 PHP
Thinkphp单字母函数使用指南
2016/05/08 PHP
PHP CURL使用详解
2019/03/21 PHP
js 时间格式与时间戳的相互转换示例代码
2013/12/25 Javascript
PhantomJS快速入门教程(服务器端的 JavaScript API 的 WebKit)
2015/08/06 Javascript
Jquery attr()方法 属性赋值和属性获取详解
2016/04/15 Javascript
JS针对浏览器窗口关闭事件的监听方法集锦
2016/06/24 Javascript
Javascript 基础---Ajax入门必看
2016/07/06 Javascript
AngularJS使用ng-inlude指令加载页面失败的原因与解决方法
2017/01/19 Javascript
js oncontextmenu事件使用详解
2017/03/25 Javascript
AngularJS 中ui-view传参的实例详解
2017/08/25 Javascript
打字效果动画的4种实现方法(超简单)
2017/10/18 Javascript
js 判断一个数字是不是2的n次方幂的实例
2017/11/26 Javascript
Vue表单类的父子组件数据传递示例
2018/05/03 Javascript
详解webpack loader和plugin编写
2018/10/12 Javascript
JS实现li标签的删除
2019/04/12 Javascript
小程序如何在不同设备上自适应生成海报的实现方法
2019/08/20 Javascript
JS实现判断移动端PC端功能
2020/02/21 Javascript
JavaScript判断数据类型有几种方法及区别介绍
2020/09/02 Javascript
Python中装饰器的一个妙用
2015/02/08 Python
Python实现国外赌场热门游戏Craps(双骰子)
2015/03/31 Python
十分钟利用Python制作属于你自己的个性logo
2018/05/07 Python
python Web开发你要理解的WSGI &amp; uwsgi详解
2018/08/01 Python
python使用PIL模块获取图片像素点的方法
2019/01/08 Python
python线程的几种创建方式详解
2019/08/29 Python
Python装饰器如何实现修复过程解析
2020/09/05 Python
如何强制垃圾回收
2015/10/06 面试题
《三亚落日》教学反思
2014/04/26 职场文书
鉴史问廉观后感
2015/06/10 职场文书
2016年乡镇综治宣传月活动总结
2016/03/16 职场文书