支付宝即时到账接口开发 - 支付宝即时到账接口和TP框架的结合

第一步:

将核心方法和加密方法放到项目里,Application/Home/common/function.php中即可。方便调用。

把alipay_core.function.php和alipay_md5.function.php2个文件中的函数,拷贝到function.php中。

这里写图片描述

第二步:

alipay_notify.class.phpalipay_submit.class.php拷贝到TP框架源码目录ThinkPHP/Libray/Think下,并修改这2个文件的名称为:

AlipayNotify.class.php
AlipaySubmit.class.php
(这是TP框架的命名规范)

然后要在这2个类添加命名空间:

namespace Think;

并且删除下面2句(因为引入的函数都被我们已经拷贝到Application/Home/common/function.php中了):

require_once("alipay_core.function.php");
require_once("alipay_md5.function.php");

这里写图片描述

第三步

在项目中调用支付宝接口

1、在配置文件中对支付宝相关参数进行配置
Application/Home/conf/config.php:

<?php
return array(
    //'配置项'=>'配置值'

    //支付宝配置
    'alipay_config'=>array(
        //合作身份者ID,签约账号,以2088开头由16位纯数字组成的字符串,查看地址:https://b.alipay.com/order/pidAndKey.htm
        'partner'=>'',
        //MD5密钥,安全检验码,由数字和字母组成的32位字符串,查看地址:https://b.alipay.com/order/pidAndKey.htm
        'key'=>'',
        //这里是卖家的支付宝帐号
        'seller_email'=>'',
        //服务器异步通知页面路径  需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
        'notify_url'=>'',
        //页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
        'return_url'=>'',
        //签名方式
        'sign_type'=>strtoupper('MD5'),
        //字符编码格式 目前支持 gbk 或 utf-8
        'input_charset'=>strtolower('utf-8'),
        //ca证书路径地址,用于curl中ssl校验
        //请保证cacert.pem文件在当前文件夹目录中
        'cacert'=>getcwd().'\\cacert.pem',
        //访问模式,根据自己的服务器是否支持ssl访问,若支持请选择https;若不支持请选择http
        'transport'=>'http',
        //支付类型 ,无需修改
        'payment_type'=>'1',
        //产品类型,无需修改
        'service'=>'create_direct_pay_by_user',
    ),
);

2、创建订单支付控制器,完成支付流程
Application/Home/Controller/CheckoutController.php
订单支付控制器

http://mydev.com/index.php/Home/checkout/index 就是确认支付页面:
这里写图片描述
此表单提交到Checkout/submit,然后跳转到支付宝页面等待用户支付,支付完成后会更加支付宝配置里的notify_urlreturn_url 发送通知。
所以需要修改对应的配置参数:

//服务器异步通知页面路径  需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
        'notify_url'=>'http://www.mydev.com/index.php/Home/Checkout/notifyurl',
//页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
        'return_url'=>'http://www.mydev.com/index.php/Home/Checkout/returnurl',

3、CheckoutController.class.php代码如下:

<?php

namespace Home\Controller;
use Think\Controller;
class CheckoutController extends Controller {
    //订单确认页面
    public function index(){
        //这里订单编号已经生成
        //要客户确认订单信息
       $this->display();
    }

    //确认支付
    //发送请求到支付宝(会跳转到支付宝页面等待用户支付)
    public function submit(){
        //读取支付宝相关配置参数
        $alipay_config = C('alipay_config');

        /**************************请求参数**************************/
        //商户订单号,商户网站订单系统中唯一订单号,必填
        $out_trade_no = $_POST['WIDout_trade_no'];
        //订单名称,必填
        $subject = $_POST['WIDsubject'];
        //付款金额,必填
        $total_fee = $_POST['WIDtotal_fee'];
        //商品描述,可空
        $body = $_POST['WIDbody'];

        /************************************************************/

        //构造要请求的参数数组,无需改动
        $parameter = array(
            "service"       => $alipay_config['service'],
            "partner"       => $alipay_config['partner'],
            "seller_id"  => $alipay_config['partner'],
            "payment_type"  => $alipay_config['payment_type'],
            "notify_url"    => $alipay_config['notify_url'],
            "return_url"    => $alipay_config['return_url'],

            "out_trade_no"  => $out_trade_no,
            "subject"   => $subject,
            "total_fee" => $total_fee,
            "body"  => $body,
            "_input_charset"    => trim(strtolower($alipay_config['input_charset']))
            //其他业务参数根据在线开发文档,添加参数.文档地址:https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.kiX33I&treeId=62&articleId=103740&docType=1
            //如"参数名"=>"参数值"

        );

        //建立请求
        $alipaySubmit = new \Think\AlipaySubmit($alipay_config);
        $html_text = $alipaySubmit->buildRequestForm($parameter,"get", "确认");
        echo $html_text;
    }

    //支付宝异步通知方法
    public function notifyurl(){
        //计算得出通知验证结果
        $alipayNotify = new 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') {
                //判断该笔订单是否在商户网站中已经做过处理
                    //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
                    //请务必判断请求时的total_fee、seller_id与通知时获取的total_fee、seller_id为一致的
                    //如果有做过处理,不执行商户的业务程序

                //注意:
                //退款日期超过可退款期限后(如三个月可退款),支付宝系统发送该交易状态通知

                //调试用,写文本函数记录程序运行情况是否正常
                //logResult("这里写入想要调试的代码变量值,或其他运行的结果记录");
            } else if ($_POST['trade_status'] == 'TRADE_SUCCESS') {
                //判断该笔订单是否在商户网站中已经做过处理
                    //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
                    //请务必判断请求时的total_fee、seller_id与通知时获取的total_fee、seller_id为一致的
                    //如果有做过处理,不执行商户的业务程序

                //注意:
                //付款完成后,支付宝系统发送该交易状态通知

                //调试用,写文本函数记录程序运行情况是否正常
                //logResult("这里写入想要调试的代码变量值,或其他运行的结果记录");
            }

            //——请根据您的业务逻辑来编写程序(以上代码仅作参考)——

            echo "success";     //请不要修改或删除

            /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        }
        else {
            //验证失败
            echo "fail";

            //调试用,写文本函数记录程序运行情况是否正常
            //logResult("这里写入想要调试的代码变量值,或其他运行的结果记录");
        }
    }

    //支付宝同步通知方法
    public function returnurl(){
        //读取支付宝相关配置参数
        $alipay_config = C('alipay_config');

        //计算得出通知验证结果
        $alipayNotify = new \Think\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'];
            //交易金额
            $total_fee = $_GET['total_fee'];
            //买家支付宝帐号
            $buyer_email = $_GET['buyer_email'];
            //通知发送时间
            $notify_time = $_GET['notify_time'];
            //通知校验ID
            $notify_id = $_GET['notify_id'];
            ////////////////////////////以上数据是支付宝返回给我们的,我们可以根据业务选择性处理///////////////////////////////


            if($_GET['trade_status'] == 'TRADE_FINISHED' || $_GET['trade_status'] == 'TRADE_SUCCESS') {
                //判断该笔订单是否在商户网站中已经做过处理
                    //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
                    //如果有做过处理,不执行商户的业务程序

                //订单支付成,做其他业务处理:比如修改订单状态
                //orderHandel...
                //然后跳转到一个成功页面,提示用户支付成功...
            }else {
              echo "trade_status=".$_GET['trade_status'];
              //跳转到一个提示用户支付失败的页面
            }

            //echo "验证成功<br />";

            //——请根据您的业务逻辑来编写程序(以上代码仅作参考)——

            /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        }else {
            //验证失败
            //如要调试,请看alipay_notify.php页面的verifyReturn函数
            echo "验证失败";
             //跳转到一个提示用户支付失败的页面
        }
    }
}

上面代码只是基本示例,网站业务逻辑需要自己更多处理。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
<?php /**  * 支付宝支付  */ return [         //应用ID,您的APPID。         'app_id' => "",         //商户私钥, 请把生成的私钥文件中字符串拷贝在此         'merchant_private_key' => "",         //异步通知地址         'notify_url' => "",         //同步跳转         'return_url' => "",         //编码格式         'charset' => "UTF-8",         //签名方式         'sign_type'=>"RSA2",         //支付宝网关         'gatewayUrl' => "https://openapi.alipay.com/gateway.do",         //支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。         'alipay_public_key' => "", ];ThinkPHP5 支付宝支付扩展库, 包括手机网站支付、电脑网站支付、支付查询、退款、退款查询、对单等。用法电脑网站支付 Pagepay.php调用 \alipay\Pagepay::pay($params) 即可手机网站支付 Wappay.php调用 \alipay\Wappay::pay($params) 即可交易查询接口 Query.php调用 \alipay\Query::exec($query_no) 即可交易退款接口 Refund.php调用 \alipay\Refund::exec($params) 即可退款统一订单查询 RefundQuery.php调用 \alipay\RefundQuery::exec($params) 即可交易关闭接口 Close.php调用 \alipay\Close::exec($query_no) 即可查询单下载地址接口 Datadownload.php调用 \alipay\Datadownload::exec($bill_type, $bill_date) 即可验签 Notify.php调用 \alipay\Notify::checkSign($params) 即可
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值