博客列表 >支付宝支付

支付宝支付

LiuBo的博客
LiuBo的博客原创
2017年08月04日 15:12:02983浏览

php接入支付宝的流程写在这里供像我一样的小白参考。

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

1.png


2.下载SDK&Dome(网址https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.CBtzBF&treeId=203&articleId=105910&docType=1)

2.png



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

3.png


lib文件很重要,是整个接口的核心类文件;

alipay.config.php是相关参数的配置文件

alipayapi.php 是支付宝接口入口文件

notify_url.php 是服务器异步通知页面文件;

return_url.php 是页面跳转同步通知文件;

3.打开alipay.config.php

4.png


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


5.png

6.png


通过这个例子,我们就能灵活运用了

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

**********************************************

嵌入thinkphp3.2.3

我保留了

7.png

重新命名为

8.png

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

9.png

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

10.png

Alipay.class.php 有改动

<?php
namespace Extend\Alipay;
class Alipay {
    public function pay($alipay_config,$args){
        /**************************请求参数**************************/
        //支付类型
    $payment_type = "1";
    //必填,不能修改
    //服务器异步通知页面路径
    $notify_url = $args['notify_url'];
    //需https://格式的完整路径,不能加?id=123这类自定义参数
    //页面跳转同步通知页面路径
    $return_url = $args['return_url'];
    //需https://格式的完整路径,不能加?id=123这类自定义参数,不能写成https://localhost/
        //商户订单号
    $out_trade_no = $args['out_trade_no'];
    //商户网站订单系统中唯一订单号,必填
    //订单名称
    $subject = "测试";
    //必填
    //付款金额
    $total_fee = $args['total'];
    //必填
    //订单描述
    $body = "test";
    //需以https://开头的完整路径,例如:https://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配置文件里配置参数

11.png

然后新建控制器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 = 'https://'.$_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("这里写入想要调试的代码变量值,或其他运行的结果记录");
        }
    }
}

然后

12.png

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


声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议