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

2020-11-11 0 307

最近在写个需要简单支付的小项目,用到了支付宝接口,现已完成。把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接入支付宝接口失效流程详解 http://www.ox520.com/22646.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务