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 19 PHP
如何修改和添加Apache的默认站点目录
Jul 05 PHP
php中in_array函数用法探究
Nov 25 PHP
php取得字符串首字母的方法
Mar 25 PHP
PHP中把对象转换为关联数组代码分享
Apr 09 PHP
利用PHP将部分内容用星号替换
Apr 21 PHP
如何使用纯PHP实现定时器任务(Timer)
Jul 31 PHP
PHP+mysql+ajax轻量级聊天室实现方法详解
Oct 17 PHP
PHP面向对象之里氏替换原则简单示例
Apr 08 PHP
php微信开发之关键词回复功能
Jun 13 PHP
laravel Task Scheduling(任务调度)在windows下的使用详解
Oct 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
PHP遍历并打印指定目录下所有文件实例
2014/02/10 PHP
php+mysql实现数据库随机重排实例
2014/10/17 PHP
Laravel中基于Artisan View扩展包创建及删除应用视图文件的方法
2016/10/08 PHP
PHP使用PDO、mysqli扩展实现与数据库交互操作详解
2019/07/20 PHP
PHP手机号码及邮箱正则表达式实例解析
2020/07/11 PHP
event对象的方法 兼容多浏览器
2009/06/27 Javascript
JavaScript 学习技巧
2010/02/17 Javascript
分享一道笔试题[有n个直线最多可以把一个平面分成多少个部分]
2012/10/12 Javascript
js中onload与onunload的使用示例
2013/08/25 Javascript
JavaScript Array对象扩展indexOf()方法
2014/05/09 Javascript
JavaScript学习笔记之JS函数
2015/01/22 Javascript
JS实现按比例缩放图片的方法(附C#版代码)
2015/12/08 Javascript
jQuery实现table中的tr上下移动并保持序号不变的实例代码
2016/07/11 Javascript
利用ES6的Promise.all实现至少请求多长时间的实例
2017/08/28 Javascript
详解使用vscode+es6写nodejs服务端调试配置
2017/09/21 NodeJs
JavaScript通过mouseover()实现图片变大效果的示例
2017/12/20 Javascript
Angular 4.x+Ionic3踩坑之Ionic3.x pop反向传值详解
2018/03/13 Javascript
微信小程序实现录音功能
2019/11/22 Javascript
js找出5个数中最大的一个数和倒数第二大的数实现方法示例小结
2020/03/04 Javascript
Python新手在作用域方面经常容易碰到的问题
2015/04/03 Python
Python做简单的字符串匹配详解
2017/03/21 Python
Python高级用法总结
2018/05/26 Python
Python 带有参数的装饰器实例代码详解
2018/12/06 Python
解决pycharm下os.system执行命令返回有中文乱码的问题
2019/07/07 Python
Pycharm制作搞怪弹窗的实现代码
2021/02/19 Python
HTML5 通过Vedio标签实现视频循环播放的示例代码
2020/08/05 HTML / CSS
中级会计职业生涯规划范文
2014/01/16 职场文书
上课打牌的检讨书
2014/02/15 职场文书
幼儿教师师德演讲稿
2014/05/06 职场文书
预防艾滋病宣传标语
2014/06/25 职场文书
中学清明节活动总结
2014/07/04 职场文书
群众路线四风自我剖析材料
2014/10/08 职场文书
2014年大学生工作总结
2014/11/20 职场文书
2016年学校党支部公开承诺书
2016/03/25 职场文书
Nginx 反向代理解决跨域问题多种情况分析
2022/01/18 Servers
深入理解mysql事务隔离级别和存储引擎
2022/04/12 MySQL