超详细!!!支付宝支付接口tp3.2 SDK接入流程(应该一看就可以懂,从0-100)

支付宝支付接口tp3.2 SDK接入流程

  1. 由于在支付宝开放平台注册啊什么生成密钥什么的比较简单,这里就不多做赘述,就从下载完sdk以后怎么使用开始吧。
    切记一点!!!不要下载错了,电脑网站支付、手机网站支付、app支付,我这里以电脑网站为例程
  2. 下载好了以后发现是这样的:
    支付宝
    解压后:
    在这里插入图片描述
  3. 然后把这些文件一股脑的拖放到thinkphp文件夹内的library/vender目录下:
    在这里插入图片描述
  4. 然后sdk就这样安装好啦,开始配置过程:
    将最外面的config文件夹里面的config配置内容复制到自己项目common的文件夹内,以便于后期直接在项目文件夹内调用配置内容
    在这里插入图片描述在这里插入图片描述
  5. 像是这样,那之后呢,我们就可以在项目里欢快的直接用C函数来条用里面的配置啦
    在这里插入图片描述
  6. 然后我们就开始调用sdk里面的函数啦~在自己的控制器,或者logic层(自己建立的一个层次,其实可以直接在控制器里调用的)创建如下一个函数:里面注释应该写的很清楚啦
/**
   * 支付宝pc网站支付接口
   *
   * @author godleisen
   * @param [param]
   * @return [param]
   * @todo nothing to do
   */
  public function pay_for_alipay_from_pc_web($po_data, $payment_id)
  {
    Vendor('Alipay.pagepay.service.AlipayTradeService'); // 引入库里的sdk
    Vendor('Alipay.pagepay.buildermodel.AlipayTradePagePayContentBuilder');

    $config = C('ALIPAY_CONFIG'); // 这里呢就是调用的公共config里面的配置参数

	// 下面是每个接口都会需要的请求参数,具体的话可以直接在支付宝开放平台的接口文档看到。

    //商户订单号,商户网站订单系统中唯一订单号,必填
    $out_trade_no = $payment_id;

    //订单名称,必填
    $subject = 'Service of COOPTOPUS';


    //付款金额,必填
    $total_amount = $po_data['price'];
    //$total_amount = '0.01';


    //商品描述,可空
    $body = 'If you have any problem you can contact with us.';

    //超时时间
    $timeout_express = "3m";

    $payRequestBuilder = new \AlipayTradePagePayContentBuilder(); // 这里要看清处,对应接口的sdk,实例化的名字不一样,比如 电脑网站支付是new \AlipayTradePagePayContentBuilder();,手机网站支付是new \AlipayTradeWapPayContentBuilder();
    $payRequestBuilder->setBody($body);
    $payRequestBuilder->setSubject($subject);
    $payRequestBuilder->setOutTradeNo($out_trade_no);
    $payRequestBuilder->setTotalAmount($total_amount);
    $payRequestBuilder->setTimeExpress($timeout_express); // 写入配置的参数

    $payResponse = new \AlipayTradeService($config);
    $result = $payResponse->pagePay($payRequestBuilder, $config['return_url'], // 好这里就是重点,需要调用什么函数,就直接通过$payResponse->去调用就好,大家可以到sdk里面的函数定义里面去看,里面写的很清楚,哪个接口调用的哪个函数,这里的pagePay就是电脑网站支付接口
    if (!empty($result)) {
      return $this->setSuccess('get payment_info success!', 0, $result);
    } else {
      return $this->setError('request fail!');
    }
  }
  1. 好的,调用就是如此的简单,饶是如此,作为第一次接触支付接口的我,也是弄了好半天!

  2. 重点又来了!!!调用接口如果参数都正确的话,那么支付宝会返回一个表单文件,直接渲染在一个新的窗口上就好,下面我以vue为例子,因为这个项目前端我自己用的是vue

  3. 其实也就是寥寥几句代码的功夫:(这里是请求接收端)

// this.show_alipay = 1; 
                        let routerData = this.$router.resolve({
                          path: "/payGateWay",
                          query: { htmlData: e.data.data.return_form } // 这里的e.data.data.return_form就是支付宝返回的表单,用router直接创建一个新的窗口,url传值,然后在另一个窗口直接渲染表单                          
                        });
                        // 打开新页面
                        window.open(routerData.href, "_ blank");
  1. 这里是另一个要跳转的窗口,本来是一个空界面,只需要拿来渲染支付宝返回的表单就好:
<template>
  <div>
    <div v-html="payGateWay">{{payGateWay}}</div>
  </div>
</template>
<script>
export default {
  name: "payGateWay",
  data() {
    return {
      payGateWay: ""
    };
  },
  mounted() {
    let form = this.$route.query.htmlData;
    this.payGateWay = form;
    this.$nextTick(() => {
      document.getElementById("alipaysubmit").submit();
    });
  }
};
</script>
  1. 哈哈哈做到这里,已经成功了一大半了,但是后面还有个小坑,就是支付宝支付成功后的异步通知,也就是之前config里面的notify_url地址,等你支付成功后,支付宝会直接异步通知你写的哪个接口。因为支付成功了以后,你肯定要知道吧,然后对应的对自己的订单数据库进行一个更新把,至少我是这么做的。那么就要继续写一个接受的接口,其实sdk也帮你写好了,这里我直接上代码:
	 /**
   * 获取客户的支付跳转提醒,然后去查询支付情况
   *
   * @author godleisen
   * @param [param]
   * @return [param]
   * @todo nothing to do
   */
  public function get_pay_status()
  {
    Vendor('Alipay.pagepay.service.AlipayTradeService');
    Vendor('Alipay.pagepay.buildermodel.AlipayTradePagePayContentBuilder');
    $config = C('ALIPAY_CONFIG');
    // $this->ajaxReturn('success');die;
    \Think\Log::record(date('H:i:s') . json_encode($_POST)); // 这里就是一个小坑,因为支付宝请求回来,是他们自己的服务器异步请求,所以并不会在浏览器的控制台上有请求的记录,所以普通的dump啊var_dump啊echo啊都不会有显示,所以我直接把返回的结果写到日志里,那么调试起来就很方便和谐了。
    $pay_id = $_POST['out_trade_no'];
    $payResponse = new \AlipayTradeService($config);
    $result = $payResponse->check($_POST); // 这里直接将返回的数据传入check函数即可噢
    
    if ($result == true) {
    	echo 'success'; // 这里,你要是不反回success,支付宝会把你烦死,动不动隔一段时间发你一次。。
    } else {
		echo 'error';
	}
}

好啦!以上就是支付宝支付接口的详细接入过程,因为是第一次接触支付接口,所以有什么不妥或者是更加方便的办法,欢迎留言。虽然是博客小白,但是上面的过程都是自己一步一个脚印再一个坑走出来的,应该是非常完善了,就在这边做个笔记,以免自己忘了,也让能看到的朋友少走一些弯路,不喜勿喷!!!

发布了16 篇原创文章 · 获赞 3 · 访问量 507

猜你喜欢

转载自blog.csdn.net/godleisen/article/details/103721163