ThinkPHP框架下整合支付宝支付功能图文教程

本文实例讲述了ThinkPHP框架下整合支付宝支付功能。分享给大家供大家参考,具体如下:

背景

  • 近期项目需要接入支付宝支付功能,其中开发使用了ThinkPHP3.2.3框架,通过参考开发平台文档可以知道,网站开发有两种场景,一种是手机网站支付,直接唤醒支付宝app进入支付操作;另一种多是 PC 端显示支付二维码的形式,然后使用手机的支付宝app扫描。
  • 此处主要介绍手机网站支付的实现,后期补充扫码支付。

一.接入配置

1).接入步骤

根据“快速接入”中的流程,两者大同小异,都是进行:

  • 第一步:创建应用并获取APPID
  • 第二步:配置密钥
  • 第三步:搭建和配置开发环境
  • 第四步:调用接口

2).配置截图

3).提示说明

虽然官方文档已经做的很详细、成熟,不过还是有几点需要着重提醒一下,以免不必要的纠结。

  • 应用创建成功后需要大概一到三天的审核
  • 配置密钥时建议下载其提供的加密工具,可参考RSA密钥生成方法
  • 此处我所下载的是开发平台服务端SDK中的PHP版资源,而非DEMO文件,相信两者还是有所区别的

二.手机网站支付接口实现

1).测试入口页面

如下图所示,我在此创建了一个简单的入口文件,根据开发文档中的介绍是需要统一编码格式的,此处我选择的是UTF-8

2).html代码参考

需要注意的是,接口指明需要POST方式进行提交请求

3).支付宝配置信息

对于支付宝的配置信息,我写在 Application/Common/Conf/config.php中

//支付宝 支付配置
  'ALI_CONFIG' => array(
    'gatewayUrl'      => 'https://openapi.alipay.com/gateway.do',//支付宝网关(固定)'
    'appId'         => '2017xxxxxxxx9',//APPID即创建应用后生成
    //由开发者自己生成: 请填写开发者私钥去头去尾去回车,一行字符串
    'rsaPrivateKey'     => 'MIIExxxxxxxxxxxxxxxxxxxxxxxxxxxq',
    //支付宝公钥,由支付宝生成: 请填写支付宝公钥,一行字符串
    'alipayrsaPublicKey'  => 'IIBxxxxxxxxxxxxxxxxxxxEFAA',
    'notifyUrl'       => 'http://www.xxx.com/m/cartpay/notify_ali', // 支付成功通知地址
    'returnUrl'       => 'http://www.xxx.com', // 支付后跳转地址
    'returnPcUrl'      => 'http://www.xxx.com/Home', // PC端扫码支付后跳转地址
  ),

4).服务端SDK导入

将前面所下载的SDK放入自定义的位置,在此,我习惯放在如下的路径中,…\ThinkPHP\Library\Vendor\Alipay,特别提醒一点,对于各文件类的引用会依据代码框架而不同,需要自行确认。

5).支付接口实现

在请求唤醒支付宝支付的路径中进行接口代码的编辑

提示

  • 通过实验发现,如果在电脑端进行此功能的支付测试,会报出如下的类似错误,个人认为源于手机和PC的内置配置不同
  • 对于手机网站支付需要在手机上测试,可自行配置虚拟域名手机访问即可,不要在此问题上花费不必要的时间
  • 因为本人就是在电脑有报错,手机端访问却能完美实现,从而走了验证签名的过程到最后却并非错在签名,当然也不排除你的操作过程签名一定是没问题的哦.


代码实现如下:
  /**
   * 支付宝支付post提交页面
   */
  public function alipay(){
    if (IS_POST){
      Vendor('Alipay.aop.AopClient');
      Vendor('Alipay.aop.request.AlipayTradeWapPayRequest');
      //$out_trade_no = I('post.order_sn');
      /*
       * $out_trade_no 为自己业务逻辑中要支付的订单号
       *   可从POST数据中提取,具体安全起见可自行加密操作 此处仅举例测试数据
       * $order_amount 为要进行支付的金额 注意要用小数转换
       *   例如:3.50,10.00
       * $aliConfig 获取支付宝配置数据
       */
      $out_trade_no = '2017M'.time();
      $body = '欢迎购买商品,愿您购物愉快';
      $subject = '你好';
      $order_amount = 9.00;
      $aliConfig = C('ALI_CONFIG');
      $aop = new \AopClient();
      $aop->gatewayUrl = $aliConfig['gatewayUrl'];
      $aop->appId = $aliConfig['appId'];
      $aop->rsaPrivateKey = $aliConfig['rsaPrivateKey'];
      $aop->alipayrsaPublicKey=$aliConfig['alipayrsaPublicKey'];
      $aop->apiVersion = '1.0';
      $aop->postCharset='UTF-8';
      $aop->format='json';
      $aop->signType='RSA2';
      $request = new \AlipayTradeWapPayRequest ();
      $bizContent = "{" .
        "  \"body\":\"$body.\"," .
        "  \"subject\":\"$subject\"," .
        "  \"out_trade_no\":\"$out_trade_no\"," .
        "  \"timeout_express\":\"90m\"," .
        "  \"total_amount\":$order_amount," .
        "  \"product_code\":\"QUICK_WAP_WAY\"" .
        " }";
      $request->setBizContent($bizContent);
      $request->setNotifyUrl($aliConfig['notifyUrl']);
      $request->setReturnUrl($aliConfig['returnUrl']);
      $result = $aop->pageExecute ( $request);
      echo $result;
    }else{
      echo 'sorry,非法请求失败';
    }
  }

6).支付成功后的通知处理

此时,通过获取所提交过来的post数据,进行订单号的剥离,从而进行下一步的业务逻辑处理即可.
[注意]:

  • 接口文档中有点明,支付通知功能最后需要输出‘success'
  • 此处的通知路径要与配置中确定的 ‘notifyUrl'完全一致
 /**
  * 支付宝支付通知功能
  */
  public function notify_ali(){
    $out_trade_no = I('post.out_trade_no');
    $this->toUpdatePayInfo($out_trade_no,'ali');
    echo 'success';
  }

三.电脑网站支付接口实现

对比来看,其实 PC 端的代码设计与手机端大同小异,在此点明一下使用情景,可进行参考。

1).支付接口实现

提示:

  • 测试发现,接口中定义“subject”时,对于文字的数目有要求,不能超过四个字,至于字母似乎没有特别限制,开发过程中原想显示全部的商品名称却无法实现,还请注意。
  • 提供的代码暂时未进行界面的设计,可参考 手机端接口思想,接收并处理订单信息后再唤醒支付宝,当前的代码可以在公共文件配置正确的情况下,直接公网访问接口链接即可展示效果。
  • 支付成功后的通知处理,请参考手机端实现方式.

2).实现效果截图

3).代码实现如下:

 /**
   * 电脑端唤醒 支付宝扫码支付接口
   */
  public function aliPayPage(){
    $out_trade_no = '2017PC'.time();
    $order_amount = '12.88';
    $proName = "真米黑米 XXXXXX";
    Vendor('Alipay.aop.AopClient');
    Vendor('Alipay.aop.request.AlipayTradePagePayRequest');
    //构造参数
    $aop = new \AopClient();
    $aliConfig = C('ALI_CONFIG');
    $aop->gatewayUrl = $aliConfig['gatewayUrl'];
    $aop->appId = $aliConfig['appId'];
    $aop->rsaPrivateKey = $aliConfig['rsaPrivateKey'];

    $aop->apiVersion = '1.0';
    $aop->signType = 'RSA2';
    $aop->postCharset= 'utf-8';
    $aop->format='json';
    $request = new \AlipayTradePagePayRequest ();
    $request->setReturnUrl($aliConfig['returnPcUrl']);
    $request->setNotifyUrl($aliConfig['notifyUrl']);
    $request->setBizContent(
      "{" .
      "  \"product_code\":\"FAST_INSTANT_TRADE_PAY\"," .
      "  \"subject\":\"$proName\"," .
      "  \"out_trade_no\":\"$out_trade_no\"," .
      "  \"total_amount\":$order_amount," .
      "  \"body\":\"Iphone6 16G\"" .
      " }");
    //请求
    $result = $aop->pageExecute ($request);
    //输出
    echo $result;
  }

附录:

源代码下载>>>

更多关于thinkPHP相关内容感兴趣的读者可查看本站专题:《ThinkPHP入门教程》、《thinkPHP模板操作技巧总结》、《ThinkPHP常用方法总结》、《codeigniter入门教程》、《CI(CodeIgniter)框架进阶教程》、《Zend FrameWork框架入门教程》及《PHP模板技术总结》。

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

(0)

相关推荐

  • ThinkPHP框架整合微信支付之刷卡模式图文详解

    本文实例讲述了ThinkPHP框架整合微信支付之刷卡模式.分享给大家供大家参考,具体如下: 大家好,这篇文章是继微信支付之Native 扫码支付 模式二之后的微信支付系列教程第四篇:微信刷卡支付 本教程跟前三篇教程不一样,所需要的类库也不一样,所以做刷卡支付的时候,与之前的方法没多少关系,大家注意一下. 下面开始介绍详细步骤! step1:下载微信刷卡支付demo,如下图: WxPayMicropayHelper:这个文件夹下就是刷卡支付微信提供的类库 demo:这个文件夹下是关于刷卡支付的详细

  • Thinkphp和onethink实现微信支付插件

    thinkPHP和微支付实现的微信支付插件,在微信中调用微信jssdk实现支付,这里有详细的代码和教程,具体看这里: //实现的Wxpay钩子方法 public function Wxpay($param){ require './Addons/Wxpay/WxPayPubHelper/WxPayPubHelper.php'; $jsApi = new \JsApi_pub(); //=========步骤1:网页授权获取用户openid============ if (!isset($_GET

  • thinkphp整合微信支付代码分享

    本文实例为大家分享了thinkphp整合微信支付代码,供大家参考,具体内容如下 下载:支付SDK 将微信支付SDK放在第三方类库Vendor下面,请切记把WxPay.Config.php里面的商户信息修改为您的公众号信息,以避免造成资金的流失. php端代码 public function pay(){ //商户基本信息,可以写死在WxPay.Config.php里面,其他详细参考WxPayConfig.php vendor('Pay.JSAPI'); $tools = new \JsApiPa

  • Thinkphp整合微信支付功能

    先上效果图:我要告诉你我这一篇文章写的是微信支付之中的(普通商户而非服务商商户的统一下单JSPI)微信支付: 其实自己整合SDK失败了,用了一个博客博主整合的代码,在这里写一下笔记: 前面准备: 1.微信公众号: 独特的appid.appscrect.接口权限之中设置可以获取用户ID信息权限的域名(每个用户对于不同公众都会有一个特有ID,通过这个ID获取用户微信账号基本信息.详情看微信开发者文档).在微信支付按钮出设置微信支付授权目录(写到发起请求的控制器那一层).设置开发者微信账号为测试白名单

  • ThinkPHP实现微信支付(jsapi支付)流程教程详解

    之前写过一篇文章讲了PHP实现微信支付(jsapi支付)流程 ,详见文章:PHP实现微信支付(jsapi支付)流程. 当时的环境是没有使用框架的,直接在一个域名指向的目录下边新建目录之后访问该目录实现的,但应用到框架中,还是有一些问题,在ThinkPHP中,由于路由规则与支付授权目录有出入,所以会报错.本篇讲讲在TP中集成微信支付的流程. 鹅厂出的SDK和文档,就是让你看不懂,使劲绕,这酸爽用了就知道.文档和SDK不是应该越简单通俗易懂越好么?难道只有使劲重构才能显示出鹅厂程序猿技术的高超咩?额

  • Thinkphp微信公众号支付接口

    本文实例为大家分享了Thinkphp微信公众号支付接口,供大家参考,具体内容如下 第一步  先把文件夹的那两个图片 配置成一样的路径 除了域名要改 其他保持一致. 第二步  把 Weixinpay 这个文件夹放在 \ThinkPHP\Library\Vendor  将Weixinpay文件夹放置到这个Vendor文件夹中 第三步  把  WxJsAPIController.class.php 这个php文件  \Home\Controller  这里面 第四步  把 WxJsAPI这个文件夹 

  • ThinkPHP框架整合微信支付之Native 扫码支付模式一图文详解

    本文实例讲述了ThinkPHP框架整合微信支付之Native 扫码支付模式一.分享给大家供大家参考,具体如下: 大家好,这篇文章是继微信支付jsapi篇之后的微信支付系列教程第二篇:扫码支付之模式一介绍下扫码支付目前有两种模式,模式一比模式二稍微复杂点,至于模式一与模式二的具体内容,流程,微信开发文档都有详细介绍,这里就不多说废话,接下来赶紧上教程! 首先我们还是一样,导入微信支付的类库: 接下来是Public下的文件: 这里的配置跟JSAPI支付一样,不需要改动 具体关于文件介绍请参考JSAP

  • ThinkPHP实现支付宝接口功能实例

    本文实例讲述了ThinkPHP实现支付宝接口功能的方法.分享给大家供大家参考.具体分析如下: 最近做系统,需要实现在线支付功能,毫不犹豫,选择的是支付宝的接口支付功能,这里我用的是即时到帐的接口,具体实现的步骤如下: 一.下载支付宝接口包 下载地址:https://b.alipay.com/order/productDetail.htm?productId=2012111200373124&tabId=4#ps-tabinfo-hash 具体如何下载,我就不在罗嗦了-- 二.重新整理接口包文件,

  • ThinkPHP框架整合微信支付之Native 扫码支付模式二图文详解

    本文实例讲述了ThinkPHP框架整合微信支付之Native 扫码支付模式二.分享给大家供大家参考,具体如下: 大家好,这篇文章是继微信支付之Native 扫码支付 模式一之后的微信支付系列教程第三篇:扫码支付之模式二 介绍下扫码支付目前有两种模式,模式一比模式二稍微复杂点,至于模式一与模式二的具体内容,流程,微信开发文档都有详细介绍,这里就不多说废话,接下来赶紧上教程! 首先我们还是一样,导入微信支付的类库: 接下来是Public下的文件: 以上跟Native扫码模式一一样,不明白请看 //w

  • ThinkPHP框架整合微信支付之JSAPI模式图文详解

    本文实例讲述了ThinkPHP框架整合微信支付之JSAPI模式.分享给大家供大家参考,具体如下: 目前微信是很火的,微信支付目前很少在网上能看到一系列详细的demo,因此,花一点时间来做一下关于微信支付系列教程, 本次教程是JSAPI模式支付,其他的还会继续写下去 首先,下载微信支付的demo,我们根据微信上的demo来整合到TP中. 介绍下我们这里需要用到的几个文件: 在demo文件夹中: js_api_call.php:提供了微信jsapi的主要功能 log_.php:提供打印日志功能 no

  • thinkPHP框架对接支付宝即时到账接口回调操作示例

    本文实例讲述了thinkPHP框架对接支付宝即时到账接口回调操作.分享给大家供大家参考,具体如下: 关于支付宝即时收款接口的对接过程,很简单,也有很多人发过,我这里就不在啰嗦了,对接完成后,在线支付成功后的回调,相对来说,是个难点,,我重点分享下我的经验. 我在开发二代旅游CMS(http://www.erdaicms.com)的时候,在回调的时候,也花了不少时间. 不管是支付宝接口好是微信支付接口,回调都分为跳转回调和异步通知回调,跳转回调是不保险的,加入客人支付完成后马上把支付页面关闭,没跳

随机推荐