支付宝支付接口代码详解:订单金额、回调处理及验证

本文详细介绍了支付宝支付接口代码的实现,包括订单金额设置、异步和同步回调处理以及数据验证等关键环节,帮助开发者快速集成支付宝支付功能。

1. 订单金额设置

在创建支付请求时,需要设置订单金额。以下代码展示了如何设置订单金额,并解释了不同代码片段的含义:

//合同金额
//此处应该填写合同金额,实际中暂时以应收账款折扣金额填写
//此处支付宝字段名称 填写错误
//$req->setTotalFee($order['order_amount']);
$req->setTotalFee($order['discount_amount']);
//$req->setTotalFee('0.01');
//$req->setTotalFee('0.00');
  • $req->setTotalFee($order['discount_amount']);:将订单金额设置为 $order['discount_amount'],实际中应该填写正确的合同金额。
  • //$req->setTotalFee('0.01');//$req->setTotalFee('0.00');:注释掉的代码用于测试,实际开发中应该使用真实的订单金额。

2. 异步回调处理

当支付宝支付成功后,会向商户服务器发送异步通知。以下代码展示了如何处理异步回调:

//支付宝异步回调
public function notify_url(){
    $aop = new AopClient;
    $aop->alipayrsaPublicKey = $this->alipayrsaPublicKey;
    $verify_result = $aop->rsaCheckV1($_POST, NULL, 'RSA2');
    if($verify_result){
        //验证成功
        //商户订单号
        $out_trade_no = $_POST['out_trade_no'];
        //支付宝交易号
        $trade_no = $_POST['trade_no'];
        //交易状态
        $trade_status = $_POST['trade_status'];
        //买家支付宝账号
        $buyer_email = $_POST['buyer_email'];
        
        //实际支付金额
        $total_amount = $_POST['total_amount'];
        
        $order = $this->get_order_by_sn($out_trade_no);
        if(!$order){
            echo 'fail';
            exit;
        }
        
        if($_POST['trade_status'] == 'TRADE_FINISHED' ||$_POST['trade_status'] == 'TRADE_SUCCESS') {
            $this->update_pay_status($out_trade_no,$order['order_amount'],$trade_no);
            echo 'success';		//请不要修改或删除
        }else{
            echo 'fail';
        }
    }else{
        echo 'fail';
    }
}
  • $aop->rsaCheckV1($_POST, NULL, 'RSA2');:使用支付宝提供的 RSA2 算法对回调数据进行验证,确保数据的真实性。
  • $this->update_pay_status($out_trade_no,$order['order_amount'],$trade_no);:将支付状态更新为成功,并将支付信息记录到数据库中。
  • echo 'success';:返回 'success' 表示处理成功,支付宝会停止重复发送通知。

3. 同步回调处理

支付宝支付完成后,会跳转到商户服务器的同步回调页面。以下代码展示了如何处理同步回调:

//支付宝同步回调
public function return_url(){
    $aop = new AopClient;
    $aop->alipayrsaPublicKey = $this->alipayrsaPublicKey;
    $verify_result = $aop->rsaCheckV1($_GET, NULL, 'RSA2');
    if($verify_result){
        //验证成功
        //获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表
        //商户订单号
        $out_trade_no = $_GET['out_trade_no'];
        //支付宝交易号
        $trade_no = $_GET['trade_no'];
        //交易状态
        $trade_status = $_GET['trade_status'];
        //买家支付宝账号
        $buyer_email = $_GET['buyer_email'];
        
        $order = $this->get_order_by_sn($out_trade_no);
        if(!$order){
            echo 'fail';
            exit;
        }
        
        if($_GET['trade_status'] == 'TRADE_FINISHED' ||$_GET['trade_status'] == 'TRADE_SUCCESS') {
            $this->update_pay_status($out_trade_no,$order['order_amount'],$trade_no);
            header('Location:'.__ROOT__.'/index.php/Home/Order/pay_success/order_sn/'.$out_trade_no); //跳转到支付成功页面
        }else{
            echo 'fail';
        }
    }else{
        echo 'fail';
    }
}
  • $aop->rsaCheckV1($_GET, NULL, 'RSA2');:使用支付宝提供的 RSA2 算法对回调数据进行验证,确保数据的真实性。
  • header('Location:'.__ROOT__.'/index.php/Home/Order/pay_success/order_sn/'.$out_trade_no);:将用户重定向到支付成功页面。

4. 其他注意事项

  • 数据验证: 在处理回调时,务必对数据进行验证,确保数据真实性。
  • 支付状态更新: 支付成功后,要及时更新订单状态,避免重复支付或订单状态错误。
  • 安全性: 为了保证数据安全,建议使用 HTTPS 协议传输数据,并进行必要的安全验证。

总结

本文详细介绍了支付宝支付接口代码的实现,包括订单金额设置、异步和同步回调处理以及数据验证等关键环节。开发者可以根据本文提供的代码和说明,快速集成支付宝支付功能,为用户提供便捷的支付体验。

提示:

  • 支付宝支付接口的详细文档,请参考支付宝官方网站。
  • 在实际开发中,需要根据自己的业务需求进行代码调整。

原文地址: https://www.cveoy.top/t/topic/llNX 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录