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 相关文章推荐
二十行语句实现从Excel到mysql的转化
Oct 09 PHP
PHP注释实例技巧
Oct 03 PHP
PHP写的资源下载防盗链类分享
May 12 PHP
JSON用法之将PHP数组转JS数组,JS如何接收PHP数组
Oct 08 PHP
PHP实现QQ、微信和支付宝三合一收款码实例代码
Feb 19 PHP
PHP实现用户登录的案例代码
May 10 PHP
PHP自定义递归函数实现数组转JSON功能【支持GBK编码】
Jul 17 PHP
Laravel框架定时任务2种实现方式示例
Dec 08 PHP
从ThinkPHP3.2.3过渡到ThinkPHP5.0学习笔记图文详解
Apr 03 PHP
laravel实现简单用户权限的示例代码
May 28 PHP
PHP封装cURL工具类与应用示例
Jul 01 PHP
PHP正则之正向预查与反向预查讲解与实例
Apr 06 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
php 空格,换行,跳格使用说明
2009/12/18 PHP
php创建session的方法实例详解
2015/01/27 PHP
PHP二维数组矩形转置实例
2016/07/20 PHP
phpinfo()中Loaded Configuration File(none)的解决方法
2017/01/16 PHP
php readfile()修改文件上传大小设置
2017/08/11 PHP
javascript getElementsByName()的用法说明
2009/07/31 Javascript
jquery.Jwin.js 基于jquery的弹出层插件代码
2012/05/23 Javascript
Javascript模块化编程(一)模块的写法最佳实践
2013/01/17 Javascript
node.js中的http.createClient方法使用说明
2014/12/15 Javascript
jQuery each函数源码分析
2016/05/25 Javascript
angular源码学习第一篇 setupModuleLoader方法
2016/10/20 Javascript
bootstrap datetimepicker实现秒钟选择下拉框
2017/01/05 Javascript
ng-options和ng-checked在表单中的高级运用(推荐)
2017/01/21 Javascript
基于Vue实现支持按周切换的日历
2020/09/24 Javascript
微信小程序开发animation心跳动画效果
2017/08/16 Javascript
vue中,在本地缓存中读写数据的方法
2018/09/21 Javascript
JS块级作用域和私有变量实例分析
2019/05/11 Javascript
ES6 Iterator遍历器原理,应用场景及相关常用知识拓展详解
2020/02/15 Javascript
Vue父组件监听子组件生命周期
2020/09/03 Javascript
[19:14]DOTA2 HEROS教学视频教你分分钟做大人-维萨吉
2014/06/24 DOTA
python使用pyhook监控键盘并实现切换歌曲的功能
2014/07/18 Python
Python中的Numpy矩阵操作
2018/08/12 Python
Python实现K折交叉验证法的方法步骤
2019/07/11 Python
Django Channel实时推送与聊天的示例代码
2020/04/30 Python
在Tensorflow中实现leakyRelu操作详解(高效)
2020/06/30 Python
python 字符串格式化的示例
2020/09/21 Python
乐天旅游香港网站:日本饭店预订
2017/11/29 全球购物
三年大学生活自我鉴定
2014/01/21 职场文书
工厂保安员岗位职责
2014/01/31 职场文书
授权委托书范本
2014/04/03 职场文书
经典演讲稿汇总
2014/05/19 职场文书
2014年助理工程师工作总结
2014/11/14 职场文书
2014年终工作总结范本
2014/12/15 职场文书
家长通知书家长意见
2015/06/03 职场文书
人生感悟经典句子
2019/08/20 职场文书
使用Ajax实现进度条的绘制
2022/04/07 Javascript