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

 更新时间:2020-11-19 10:26:24   作者:佚名   我要评论(0)

最近在写个需要简单支付的小项目,用到了支付宝接口,现已完成。把php接入支付宝的流程写在这里供像我一样的小白参考。
1.首先要有一个创建一个应用(选好自己想要的

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

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


2.下载SDK&Dome网址

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

 

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


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

3.打开alipay.config.php


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

 
 
通过这个例子,我们就能灵活运用了 开发文档: 

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

嵌入thinkphp3.2.3 我保留了


重新命名为 


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

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


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配置文件里配置参数


然后新建控制器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实现的支付宝网页支付功能示例【基于TP5框架】
  • PHP支付宝当面付2.0代码
  • php实现单笔转账到支付宝功能
  • php app支付宝回调(异步通知)详解
  • php支付宝APP支付功能
  • PHP实现QQ、微信和支付宝三合一收款码实例代码
  • PHP实现支付宝即时到账功能
  • thinkPHP框架对接支付宝即时到账接口回调操作示例

相关文章

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

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

    最近在写个需要简单支付的小项目,用到了支付宝接口,现已完成。把php接入支付宝的流程写在这里供像我一样的小白参考。 1.首先要有一个创建一个应用(选好自己想要的
    2020-11-19
  • PHP后门隐藏的一些技巧总结

    PHP后门隐藏的一些技巧总结

    前言 如果想让自己的Webshell留的更久一些,除了Webshell要免杀,还需要注意一些隐藏技巧,比如隐藏文件,修改时间属性,隐藏文件内容等。 1、隐藏文件 使用Attrib
    2020-11-19
  • 基于ThinkPHP删除目录及目录文件函数

    基于ThinkPHP删除目录及目录文件函数

    1、删除目录及目录下所有的文件 2、删除目录下的所有文件但目录结构保留 3、删除指定文件 代码如下 /** +----------------------------------------------------
    2020-11-19
  • PHP中isset、empty的用法与区别示例详解

    PHP中isset、empty的用法与区别示例详解

    前言 在编写程序调用变量时,遇到未定义的变量时,会报错,这是就需要我们对变量先进行判断,再进行相关操作。 这里主要记录两个变量判断函数的使用:isset()与empt
    2020-11-19
  • PHP dirname功能及原理实例解析

    PHP dirname功能及原理实例解析

    dirname 返回路径中的目录部分 说明 dirname(string$path) :string 给出一个包含有指向一个文件的全路径的字符串,本函数返回去掉文件名后的目录名。 参数
    2020-11-19
  • PHP mkdir创建文件夹实现方法解析

    PHP mkdir创建文件夹实现方法解析

    在开始之前,我先说明一下,可能许多朋友与我一样认为只要给一个路径,mkdir就可以创建文件夹,其它不是那样,单个的MKDIR只能创建一级目录,对于多级的就不行了,那
    2020-11-19
  • 关于PHP求解三数之和问题详析

    关于PHP求解三数之和问题详析

    三数之和 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。 注意:答案中
    2020-11-19
  • PHP fopen中文文件名乱码问题解决方案

    PHP fopen中文文件名乱码问题解决方案

    一般在php中会使用fopen进行生成文件,但是当文件名存在中文时保存文件会出现中文乱码。 源代码: <&#63;php $fileName = __DIR__ . '\测试.txt'; $fp = fopen(
    2020-11-19
  • PHP dirname简单使用代码实例

    PHP dirname简单使用代码实例

    dirname dirname—返回路径中的目录部分 说明 dirname(string$path) :string 给出一个包含有指向一个文件的全路径的字符串,本函数返回去掉文件名后的目录名。
    2020-11-19
  • ThinkPHP5分页paginate代码实例解析

    ThinkPHP5分页paginate代码实例解析

    参数 paginate(每页数量,是否简洁分页,分页参数) 使用方式 $list = db('user')->paginate(10); 自定义参数传参 $list = db('user')->paginate(10,false,['query'
    2020-11-19

最新评论