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安全编程之加密功能
Oct 09 PHP
php的urlencode()URL编码函数浅析
Aug 09 PHP
PHP 第二节 数据类型之字符串类型
Apr 28 PHP
PHP中shuffle数组值随便排序函数用法
Nov 21 PHP
PHP查询快递信息的方法
Mar 07 PHP
php给每个段落添加空格的方法
Mar 20 PHP
php简单获取目录列表的方法
Mar 24 PHP
PHP的Yii框架中行为的定义与绑定方法讲解
Mar 18 PHP
PHP yii实现model添加默认值的方法(两种方法)
Nov 10 PHP
php可变长参数处理函数详解
Feb 22 PHP
PHP仿tp实现mvc框架基本设计思路与实现方法分析
May 23 PHP
使用PHP反射机制来构造&quot;CREATE TABLE&quot;的sql语句
Mar 21 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
Smarty简单生成表单元素的方法示例
2016/05/23 PHP
PHPCMS忘记后台密码的解决办法
2016/10/30 PHP
css图片自适应大小
2007/11/28 Javascript
JS在IE和FF下attachEvent,addEventListener学习笔记
2009/11/26 Javascript
获取鼠标在div中的相对位置的实现代码
2013/12/30 Javascript
JQuery创建DOM节点的方法
2015/06/11 Javascript
JavaScript多图片上传案例
2015/09/28 Javascript
JS弹性运动实现方法分析
2016/12/15 Javascript
React为 Vue 引入容器组件和展示组件的教程详解
2018/05/03 Javascript
解决vue v-for 遍历循环时key值报错的问题
2018/09/06 Javascript
解决layui checkbox 提交多个值的问题
2019/09/02 Javascript
Vue 路由间跳转和新开窗口的方式(query、params)
2019/12/25 Javascript
vue 实现tab切换保持数据状态
2020/07/21 Javascript
vue调用微信JSDK 扫一扫,相册等需要注意的事项
2021/01/03 Vue.js
Python自动化开发学习之三级菜单制作
2017/07/14 Python
python互斥锁、加锁、同步机制、异步通信知识总结
2018/02/11 Python
解决PyCharm不运行脚本,而是运行单元测试的问题
2019/01/17 Python
Python3使用Matplotlib 绘制精美的数学函数图形
2019/04/11 Python
python开启debug模式的方法
2019/06/27 Python
css3学习心得分享
2013/08/19 HTML / CSS
Tiqets英国:智能手机上的文化和娱乐门票
2019/07/10 全球购物
请解释virtual关键字的含义
2015/06/17 面试题
Hashtable 添加内容的方式有哪几种,有什么区别?
2012/04/08 面试题
Java中的类包括什么内容?设计时要注意哪些方面
2012/05/23 面试题
建筑专业自我鉴定
2013/10/22 职场文书
通信工程毕业生自荐信
2013/11/01 职场文书
校长先进事迹材料
2014/02/01 职场文书
镇创先争优活动总结
2014/08/28 职场文书
家长学校教学计划
2015/01/19 职场文书
大学生村官个人总结
2015/02/15 职场文书
民间借贷被告代理词
2015/05/23 职场文书
中秋节感想
2015/08/10 职场文书
高一作文之暖冬
2019/11/09 职场文书
启迪人心的励志语录:脾气永远不要大于本事
2020/01/02 职场文书
每日六道java新手入门面试题,通往自由的道路
2021/06/30 Java/Android
Golang使用Panic与Recover进行错误捕获
2022/03/22 Golang