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

吾爱主题 阅读:160 2021-10-28 15:24:00 评论:0

最近在写个需要简单支付的小项目,用到了支付宝接口,现已完成。把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 有改动

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 ?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

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 <?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("这里写入想要调试的代码变量值,或其他运行的结果记录");      }    } }

然后

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/sangjinchao/article/details/54987999

可以去百度分享获取分享代码输入这里。
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

【腾讯云】云服务器产品特惠热卖中
搜索
标签列表
    关注我们

    了解等多精彩内容