PHP接入支付宝接口失效流程详解


Posted in PHP onNovember 10, 2020

最近在写个需要简单支付的小项目,用到了支付宝接口,现已完成。把php接入支付宝的流程写在这里供像我一样的小白参考。

1.首先要有一个创建一个应用(选好自己想要的功能,关于支付的功能,貌似都需要签约)

PHP接入支付宝接口失效流程详解

2.下载SDK&Dome网址

https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.CBtzBF&treeId=203&articleId=105910&docType=1

PHP接入支付宝接口失效流程详解 

我选择的是MD5签名方式,下面红框内就是做好的php Demo

PHP接入支付宝接口失效流程详解

  • lib文件很重要,是整个接口的核心类文件;
  • alipay.config.php是相关参数的配置文件
  • alipayapi.php 是支付宝接口入口文件
  • notify_url.php 是服务器异步通知页面文件;
  • return_url.php 是页面跳转同步通知文件;

3.打开alipay.config.php

PHP接入支付宝接口失效流程详解

4.配置完成后这个小例子就能直接访问了

 PHP接入支付宝接口失效流程详解
PHP接入支付宝接口失效流程详解 
通过这个例子,我们就能灵活运用了 开发文档: 

https://doc.open.alipay.com/docs/doc.htm?treeId=203&articleId=105288&docType=1

嵌入thinkphp3.2.3 我保留了

PHP接入支付宝接口失效流程详解

重新命名为 

PHP接入支付宝接口失效流程详解

分别给这五个文件加上命名空间

PHP接入支付宝接口失效流程详解

这四个文件的命名空间改为

PHP接入支付宝接口失效流程详解

Alipay.class.php 有改动

?php
namespace Extend\Alipay;
class Alipay {
  public function pay($alipay_config,$args){
    /**************************请求参数**************************/
    //支付类型
  $payment_type = "1";
  //必填,不能修改
  //服务器异步通知页面路径
  $notify_url = $args['notify_url'];
  //需http://格式的完整路径,不能加?id=123这类自定义参数
  //页面跳转同步通知页面路径
  $return_url = $args['return_url'];
  //需http://格式的完整路径,不能加?id=123这类自定义参数,不能写成http://localhost/
    //商户订单号
  $out_trade_no = $args['out_trade_no'];
  //商户网站订单系统中唯一订单号,必填
  //订单名称
  $subject = "测试";
  //必填
  //付款金额
  $total_fee = $args['total'];
  //必填
  //订单描述
  $body = "test";
  //需以http://开头的完整路径,例如:http://www.商户网址.com/myorder.html
  //防钓鱼时间戳
  $anti_phishing_key = "";
  //若要使用请调用类文件submit中的query_timestamp函数
  //客户端的IP地址
  $exter_invoke_ip = "";
  //非局域网的外网IP地址,如:221.0.0.1
  /************************************************************/
  //构造要请求的参数数组,无需改动
  $parameter = array(
    "service" => "create_direct_pay_by_user",
    "partner" => trim($alipay_config['partner']),
    "seller_id" => trim($alipay_config['seller_id']),
    "payment_type" => $payment_type,
    "notify_url"  => $notify_url,
    "return_url"  => $return_url,
    "out_trade_no" => $out_trade_no,
    "subject"    => $subject,
    "total_fee"   => $total_fee,
    "body" => $body,
    "show_url"   => $show_url,
    "anti_phishing_key"   => $anti_phishing_key,
    "exter_invoke_ip"    => $exter_invoke_ip,
    "_input_charset"    => trim(strtolower($alipay_config['input_charset']))
  );
  //建立请求
  $alipaySubmit = new lib\AlipaySubmit($alipay_config);
    $html_text = $alipaySubmit->buildRequestForm($parameter,"get", "确认");
    echo $html_text;
  }
}

在config.php配置文件里配置参数

PHP接入支付宝接口失效流程详解

然后新建控制器TextController.class.php

<?php
namespace Home\Controller;
use Think\Controller;
use \Extend\Alipay as Alipays;
class TextController extends Controller {
  public function index(){
    $this->display();
  }
  public function dobuy(){
    $out_trade_no = date('YmdHis');
    $baseurl = 'http://'.$_SERVER['HTTP_HOST'];
    $args = array(
      'out_trade_no'=>$out_trade_no,
      'notify_url'=> $baseurl.'/index.php/Home/Text/notifyurl.html',
      'return_url'=> $baseurl.'/index.php/Home/Text/returnurl.html',
      'total'=> $_POST['WIDtotal_fee'],
      );
    $s = new Alipays\Alipay();
    $s->pay(C('alipay'),$args);
  }
  // 同步跳转
  public function returnurl(){
    $alipay_config = C('alipay');
    //计算得出通知验证结果
    $alipayNotify = new Alipays\lib\AlipayNotify($alipay_config);
    $verify_result = $alipayNotify->verifyReturn();
    if($verify_result) {//验证成功
      //商户订单号
      $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') {
        //交易成功        
      }else {
       echo "trade_status=".$_GET['trade_status'];
      }  
      echo "验证成功<br />";
      }else {
      //验证失败
      //如要调试,请看alipay_notify.php页面的verifyReturn函数
      echo "验证失败";
    }
  }
  // 异步跳转
  public function notifyurl(){
    $alipay_config = C('alipay');
    //计算得出通知验证结果
    $alipayNotify = new Alipays\AlipayNotify($alipay_config);
    $verify_result = $alipayNotify->verifyNotify();
    if($verify_result) {//验证成功
      $out_trade_no = $_POST['out_trade_no'];
      //支付宝交易号
      $trade_no = $_POST['trade_no'];
      //交易状态
      $trade_status = $_POST['trade_status'];
      if($_POST['trade_status'] == 'TRADE_FINISHED'||$_POST['trade_status'] == 'TRADE_SUCCESS') {
       //交易成功
      }
      echo "success";   //请不要修改或删除
      
    }
    else {
      //验证失败
      echo "fail";
      //调试用,写文本函数记录程序运行情况是否正常
      //logResult("这里写入想要调试的代码变量值,或其他运行的结果记录");
    }
  }
}

然后

PHP接入支付宝接口失效流程详解

这样就成功完成简单的支付功能了

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
PHP无限分类的类
Jan 02 PHP
用PHP写的基于Memcache的Queue实现代码
Nov 27 PHP
php解决约瑟夫环示例
Apr 09 PHP
ThinkPHP采用实现三级循环代码实例
Jul 18 PHP
常用PHP框架功能对照表
Oct 23 PHP
9个实用的PHP代码片段分享
Jan 22 PHP
PHP实现的memcache环形队列类实例
Jul 28 PHP
PHP 生成微信红包代码简单
Mar 25 PHP
php redis实现对200w用户的即时推送
Mar 04 PHP
Laravel框架生命周期与原理分析
Jun 12 PHP
ThinkPHP5 的简单搭建和使用详解
Nov 15 PHP
PHP简单实现图片格式转换(jpg转png,gif转png等)
Oct 30 PHP
基于PHP实现用户在线状态检测
Nov 10 #PHP
PHP常量DIRECTORY_SEPARATOR原理及用法解析
Nov 10 #PHP
PHP safe_mode开启对于PHP系统函数有什么影响
Nov 10 #PHP
通过PHP实现用户注册后邮箱验证激活
Nov 10 #PHP
PHP中的异常处理机制深入讲解
Nov 10 #PHP
基于php解决json_encode中文UNICODE转码问题
Nov 10 #PHP
ThinkPHP5分页paginate代码实例解析
Nov 10 #PHP
You might like
星际中的相关伤害
2020/03/04 星际争霸
使用php清除bom示例
2014/03/03 PHP
总结PHP代码规范、流程规范、git规范
2018/06/18 PHP
PHP防止sql注入小技巧之sql预处理原理与实现方法分析
2019/12/13 PHP
PHP执行linux命令6个函数代码实例
2020/11/24 PHP
JS实现打开本地文件或文件夹
2021/03/09 Javascript
js更优雅的兼容
2010/08/12 Javascript
JavaScript字符串对象slice方法入门实例(用于字符串截取)
2014/10/16 Javascript
Javascript基础教程之argument 详解
2015/01/18 Javascript
jQuery自定义添加&quot;$&quot;与解决&quot;$&quot;冲突的方法
2015/01/19 Javascript
基于JavaScript制作霓虹灯文字 代码 特效
2015/09/01 Javascript
基于Jquery实现万圣节快乐特效
2015/11/01 Javascript
Javascript原型链的原理详解
2016/01/05 Javascript
AngularJS中$injector、$rootScope和$scope的概念和关联关系深入分析
2017/01/19 Javascript
数组Array的排序sort方法
2017/02/17 Javascript
JS获取input[file]的值并显示在页面的实现方法
2018/03/09 Javascript
vue.extend实现alert模态框弹窗组件
2018/04/28 Javascript
一步一步的了解webpack4的splitChunk插件(小结)
2018/09/17 Javascript
详解关于Angular4 ng-zorro使用过程中遇到的问题
2018/12/05 Javascript
JS实现点星星消除小游戏
2020/03/24 Javascript
keep-Alive搭配vue-router实现缓存页面效果的示例代码
2020/06/24 Javascript
深入了解Python中pop和remove的使用方法
2018/01/09 Python
对python遍历文件夹中的所有jpg文件的实例详解
2018/12/08 Python
Python如何筛选序列中的元素的方法实现
2019/07/15 Python
Python实现直方图均衡基本原理解析
2019/08/08 Python
纽约的奢华内衣店:Journelle
2016/07/29 全球购物
瑞典Happy Socks美国官网:购买色彩斑斓的快乐袜子
2016/10/19 全球购物
eBay奥地利站:eBay.at
2019/07/24 全球购物
应聘收银员个人的求职信
2013/11/30 职场文书
课堂教学改革实施方案
2014/03/17 职场文书
优秀语文教师事迹
2014/05/18 职场文书
司机工作自我鉴定
2014/09/19 职场文书
在职证明格式样本
2015/06/15 职场文书
2019个人工作自我评价范文(3篇)
2019/09/19 职场文书
利用Python第三方库实现预测NBA比赛结果
2021/06/21 Python
工厂无线对讲系统解决方案
2022/02/18 无线电