支付宝支付接口

  • 常见支付方式:微信支付、支付宝支付、银行卡支付。
  • 支付宝支付接口的类型:(商家的集成方案)
  • 担保交易接口 用户支付的资金先进入担保账户,确认收货后才进入商家的账户
  • 即时到帐接口 用户支付的资金立即进入商家账户
  • 担保交易接口在2016年8月已经停止申请。

支付宝支付流程:

 

 

 

1.创建应用(企业身份正式环境)

1支付宝开放平台:https://open.alipay.com/

 2使用自己的账号登录

 

 

 3创建应用

 

 

 

 

 

 

4添加能力-电脑网站支付

 

 

5 签约:需要审核 需要填写 个体工商户信息 ,个人身份无法继续签约。

 


2.沙箱应用(个人开发者测试环境)

支付宝为没有个体商户资质的开发测试人员提供了一个测试环境,即沙箱应用。

 

 

 

在沙箱环境可以看到appid、测试支付宝网关、密钥信息

 

 

 

APPID:2016080500173923
支付宝网关(gateway):https://openapi.alipaydev.com/gateway.do
秘钥(公钥、私钥):需要自行生成

 

在沙箱帐号 里边可以看到 商家信息 和 买家信息
进行付款的时候,就使用买家帐号

 

 

 

 

 

 

3.配置秘钥

 

 

 

4.SDK的下载与配置

SDK(software development kit),软件开发工具包,简单来说就是一些demo示例代码文件。
支付宝提供了一套demo文件,可以通过下载SDK拿到
https://docs.open.alipay.com/270/106291/

 

 

 

 下载解压

 

 

 

config.php: 配置文件,配置支付宝参数
index.php: demo示例文件(支付宝效果体现)
notify_url.php: 异步回调地址(通知页面),支付宝以post隐藏方式向商家发起请求,该方式请求安全,用于处理业                     务逻辑:比如商家在该请求里可以修改订单状态
return_url.php: 同步回调地址(通知页面),支付宝通过get显示方式向商家发起请求,该方式请求不安全,用于页                        面展示

 

SDK&DEMO的使用:
把解压后的目录移动到项目目录中的public/plugins目录并改名为alipay

 

 

 通过浏览器直接访问

 

 

 点击付款

 

 

会跳转页面报错,需要先配置支付宝参数
设置方式:
从沙箱应用页面,获取到APPID, 支付宝网关,支付宝公钥
配置秘钥时生成的商户私钥
配置到public/plugins/alipay/config.php中 

 

 

 

 

说明:notify_url 是用来提供给支付宝服务端调用的,必须是外网可以访问的路径
Return_url是用来页面同步跳转成功页面,是由浏览器跳转,原则上必须是外网可以访问的路径,这里测试可以使用本地的地址,也能跳转成功。
在浏览器重新访问
点击付款,会跳转到支付宝支付页面如下:

 

 

 

 

 

 each函数过时了,被废除了,替换成foreach

 

 

 

输入账号密码: 沙箱测试提供的买家账号密码

 

 

 

 

 跳转到同步回调地址:

 

 

 

 同时会携带很多参数在url中

 

 

 5.项目集成支付宝

 

 

 页面编写隐藏表单用于点击立即支付后的页面跳转和数据提交

 

 

 数据提交到支付处理程序

 

 

 curl函数的说明
这里需要注意的是:要想以 x-www-form-urlencoded 方式发送,最关键是发送的数据格式。
方式from-data试发送的数据用的是array格式,而方式为 x-www-form-urlencoded 时需要用key=value&key2=value2的格式发送,发送的是string型的数据。
比如我上面from-data数据的为: $data = [ 'username' => '小明', 'age' => '18' ]; x-www-form-urlencoded时的数据则要变为 http_build_query($data);
$headers = array('Content-Type: application/x-www-form-urlencoded');

 

 function curl($url,$data,$headers){
    $curl = curl_init(); // 启动一个CURL会话
    curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0); // 从证书中检查SSL加密算法是否存在
    curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模拟用户使用的浏览器
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转
    curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referer
    curl_setopt($curl, CURLOPT_POST, 1); // 发送一个常规的Post请求
    curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($data)); // Post提交的数据包
    curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循环
    curl_setopt($curl, CURLOPT_HEADER, 0); // 显示返回的Header区域内容
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
    curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
    $result = curl_exec($curl); // 执行操作
    if (curl_errno($curl)) {
        echo 'Errno'.curl_error($curl);//捕抓异常
    }
    curl_close($curl); // 关闭CURL会话
    echo($result);
}

 

 

 

交易完成,跳到回调页面,修改回调地址 进行签名验证,数据校验

 

 

参考return_url.php代码

 

 

    public function callback(){
        require_once("./plugins/alipay/config.php");
        require_once './plugins/alipay/pagepay/service/AlipayTradeService.php';
        $all = request()->all();
        $alipaySevice = new \AlipayTradeService($config);
        $result = $alipaySevice->check($all);
        if($result){
            $total_amount = $all["total_amount"];
            return view("payok",["total_amount"=>$total_amount]);
        }else{
            return view("payfail");
        }
        // 等着支付宝给我跳回来 get
//        dd(request()->all());
//        $all = request()->all();

    }

再次支付

 

 alipay定义了和laravel框架意义的同名函数,建议修改Alipay函数名即可
修改文件 /plugins/alipay/aop/AopEncrypt.php 第15行,第30行

 

 修改文件 /plugins/alipay/lotusphp_runtime/Cookie/Cookie.php

 

 再次支付

 

posted @ 2022-03-17 08:40  是梦别喊疼想赢别喊停  阅读(916)  评论(0编辑  收藏  举报