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 相关文章推荐
第五节 克隆 [5]
Oct 09 PHP
PHP动态图像的创建
Oct 09 PHP
php 三维饼图的实现代码
Sep 28 PHP
深入php define()函数以及defined()函数的用法详解
Jun 05 PHP
PHP错误提示的关闭方法详解
Jun 23 PHP
php遍历目录方法小结
Mar 10 PHP
PHP导入导出Excel代码
Jul 07 PHP
两种php去除二维数组的重复项方法
Nov 04 PHP
Linux系统下使用XHProf和XHGui分析PHP运行性能
Dec 08 PHP
php类自动装载、链式操作、魔术方法实现代码
Jul 23 PHP
PHP hebrev()函数用法讲解
Feb 21 PHP
PHP面向对象类型约束用法分析
Jun 12 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中for循环语句的几种变型
2007/03/16 PHP
PHP校验ISBN码的函数代码
2011/01/17 PHP
php强制下载类型的实现代码
2011/04/21 PHP
redis 队列操作的例子(php)
2012/04/12 PHP
浅谈php冒泡排序
2014/12/30 PHP
PHP实现批量重命名某个文件夹下所有文件的方法
2017/09/04 PHP
PHP+redis实现的购物车单例类示例
2019/02/02 PHP
php实现根据身份证获取精准年龄
2020/02/26 PHP
parentElement,srcElement的使用小结
2014/01/13 Javascript
分享2个jQuery插件--jquery.fileupload与artdialog
2014/12/26 Javascript
nodejs中向HTTP响应传送进程的输出
2017/03/19 NodeJs
angularJS利用ng-repeat遍历二维数组的实例代码
2017/06/03 Javascript
使用bootstrap实现下拉框搜索功能的实例讲解
2018/08/10 Javascript
vue循环数组改变点击文字的颜色
2019/10/14 Javascript
python常用函数详解
2016/09/13 Python
Python脚本实现12306火车票查询系统
2016/09/30 Python
python多行字符串拼接使用小括号的方法
2020/03/19 Python
python实现简单tftp(基于udp协议)
2018/07/30 Python
Python socket实现多对多全双工通信的方法
2019/02/13 Python
python画蝴蝶曲线图的实例
2019/11/21 Python
python 实现二维字典的键值合并等函数
2019/12/06 Python
python中sklearn的pipeline模块实例详解
2020/05/21 Python
基于Python快速处理PDF表格数据
2020/06/03 Python
浅谈python 类方法/静态方法
2020/09/18 Python
Python的logging模块基本用法
2020/12/24 Python
2分钟教你实现环形/扇形菜单(基础版)
2020/01/15 HTML / CSS
在子网210.27.48.21/30种有多少个可用地址?分别是什么?
2014/07/27 面试题
Does C# support multiple inheritance? (C#支持多重继承吗)
2012/01/04 面试题
高中生的学习总结自我鉴定
2013/10/26 职场文书
公司年会策划方案
2014/05/17 职场文书
反邪教标语
2014/06/23 职场文书
大学生学习计划书
2014/09/15 职场文书
党员领导干部民主生活会批评与自我批评发言
2014/09/28 职场文书
听证通知书
2015/04/24 职场文书
python process模块的使用简介
2021/05/14 Python
React如何使用axios请求数据并把数据渲染到组件
2022/08/05 Javascript