ThinkCMF5 支付宝 电脑网站支付

      1、创建应用

41935f0756504ca02fb11a064578cf8af84.jpg

  • 在【功能信息】中点击【添加功能】,选择【电脑网站支付】
  • 提交审核,等待审核通过

      2、 配置秘钥(密钥生成工具下载链接:https://docs.open.alipay.com/291/105971)

  • 生成应用公钥和应用私钥,然后在  开放平台管理中心  进行密钥配置,配置完成后可以获取支付宝公钥(ALIPAY_PUBLIC_KEY)。

      3、 进入相应的应用详情中,点击应用信息,修改开发设置中的应用网关和授权回调地址

          应用网关:用于接收支付宝异步通知 

          授权回调地址:第三方授权或用户信息授权后回调地址

      如果是普通支付类接口调用不需要配置这两个参数的 

      单纯的支付接口是不需要配置这两个信息的,简单来说就是:应用网关是用于接收口碑或是生活号的信息的,授权回调地址是第三方授权或是用户信息授权使用的,如果用不到是可以不配置的!  (  PS: 这是网上查看的,不确定哈,反正我是配置了,有大佬知道的话下面回复一下可以吗  >_<    )

 

287e4234c0d015611e4f0e37c5d7052064f.jpg

      4、 下载开放平台服务端SDK( 下载链接:https://docs.open.alipay.com/270/106291/)

      5、 下载之后将文件夹更名为 alipay ( 看你心情做这一步 )

      6、 丢到extend文件夹下面(不知道路径的  看下图)

            d3f45ffbe3fd88b36d616dfeee9c0d5dc54.jpg

      7、填写config.php文件里面的参数(上图中的config文件)

  • "notify_url" =>(支付宝异步通知,这个页面是支付宝服务器端自动调用这个页面的链接地址,这个页面根据支付宝反馈过来的信息修改网站的订单状态,更新完成后需要返回一个success给支付宝,不能含有任何其它的字符包括html语言)
  • “return_url” => (买家付款成功后,会跳到 return_url所在的页面,这个页面可以展示给客户看,这个页面只有付款成功才会跳转,并且只跳转一次)
  •  这两个地址要能直接访问到

      8、 调用支付宝支付接口的时候需要至少3个参数(商户订单号要确保唯一性;订单名称;付款金额)

示例代码如下:

//创建支付订单
public function create_order(){
    //业务逻辑自己写

    //支付宝支付
    $alipay = $this->alipay($order_number,$title,$money,$description);
    $res['url'] = $alipay;
    echo json_encode($res);exit;

    //前端获取到这个URL跳转一下这个链接 window.location.href = ret.url
}


//支付宝支付
public function alipay($order_number,$title,$money,$description){
    //需要引入这三个文件
    require_once EXTEND_PATH.'alipay/config.php';
    require_once EXTEND_PATH.'alipay/pagepay/service/AlipayTradeService.php';
    require_once EXTEND_PATH.'alipay/pagepay/buildermodel/AlipayTradePagePayContentBuilder.php';

    //商户订单号,商户网站订单系统中唯一订单号,必填
    $out_trade_no = trim($order_number);

    //订单名称,必填
    $subject = trim($title);

    //付款金额,必填
    $total_amount = trim($money);

    //商品描述,可空
    $body = trim($description);

    //构造参数
    $payRequestBuilder = new \AlipayTradePagePayContentBuilder();
    $payRequestBuilder->setBody($body);
    $payRequestBuilder->setSubject($subject);
    $payRequestBuilder->setTotalAmount($total_amount);
    $payRequestBuilder->setOutTradeNo($out_trade_no);

    $aop = new \AlipayTradeService($config);

    /**
     * pagePay 电脑网站支付请求
     * @param $builder //业务参数,使用buildmodel中的对象生成。
     * @param $return_url //同步跳转地址,公网可以访问
     * @param $notify_url //异步通知地址,公网可以访问
     * @return $response 支付宝返回的信息
     */

    $response = $aop->pagePay($payRequestBuilder,$config['return_url'],$config['notify_url']);
    return $response;
}

//config.php里配置的异步通知地址
function notifyurl(){
    //引入这两个文件
    require_once EXTEND_PATH.'alipay/config.php';
    require_once EXTEND_PATH.'alipay/pagepay/service/AlipayTradeService.php';

    $arr=$_POST;
    $alipaySevice = new \AlipayTradeService($config);
    $alipaySevice->writeLog(var_export($_POST,true));
    $result = $alipaySevice->check($arr);

    /* 实际验证过程建议商户添加以下校验。
    1、商户需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号,
    2、判断total_amount是否确实为该订单的实际金额(即商户订单创建时的金额),
    3、校验通知中的seller_id(或者seller_email) 是否为out_trade_no这笔单据的对应的操作方(有的时候,一个商户可能有多个seller_id/seller_email)
    4、验证app_id是否为该商户本身。
    */

    if($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_amount与通知时获取的total_fee为一致的
            //如果有做过处理,不执行商户的业务程序

            //注意:
            //退款日期超过可退款期限后(如三个月可退款),支付宝系统发送该交易状态通知
            }
        else if ($_POST['trade_status'] == 'TRADE_SUCCESS') {
            //判断该笔订单是否在商户网站中已经做过处理
            //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
            //请务必判断请求时的total_amount与通知时获取的total_fee为一致的
            //如果有做过处理,不执行商户的业务程序
            //注意:
            //付款完成后,支付宝系统发送该交易状态通知
        }
            //——请根据您的业务逻辑来编写程序(以上代码仅作参考)——
            echo "success";	//请不要修改或删除
    }else {
        //验证失败
        echo "fail";
    }

}

//页面跳转处理方法
function returnurl(){
    //引入这两个文件
    require_once EXTEND_PATH.'alipay/config.php';
    require_once EXTEND_PATH.'alipay/pagepay/service/AlipayTradeService.php';

    $arr=$_GET;
    $alipaySevice = new \AlipayTradeService($config);
    $result = $alipaySevice->check($arr);

    /* 实际验证过程建议商户添加以下校验。
    1、商户需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号,
    2、判断total_amount是否确实为该订单的实际金额(即商户订单创建时的金额),
    3、校验通知中的seller_id(或者seller_email) 是否为out_trade_no这笔单据的对应的操作方(有的时候,一个商户可能有多个seller_id/seller_email)
    4、验证app_id是否为该商户本身。
    */

    if($result) {//验证成功

        //请根据您的业务逻辑来编写程序(已下代码仅为参考)


        //商户订单号
	    $out_trade_no = htmlspecialchars($_GET['out_trade_no']);

	    //支付宝交易号
	    $trade_no = htmlspecialchars($_GET['trade_no']);
		
	    echo "验证成功<br />支付宝交易号:".$trade_no;

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

(PS:第一次接电脑网站支付宝支付, 这个接口($response = $aop->pagePay() )就是生成请求字符串或是form表单来提交到页面发起支付的 如果是form表单就是提交到页面会唤起支付 如果生成请求链接 就需要提交到页面访问链接唤起支付。本来 var_dump($response);  应该可以直接唤起支付的, 但是不知道是什么原因,网页不跳转,所以就用这样的方式让前台跳转URL 。 希望有大佬可以指点一下!万分感谢!)

转载于:https://my.oschina.net/u/3214063/blog/1841002

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值