api 支付宝接口 支付接口 退款接口

首先在支付宝开放平台上新建一个应用  具体操作请上 https://open.alipay.com/developmentAccess/developmentAccess.htm


从支付宝官网上下载支付宝服务端支付接口 地址:https://docs.open.alipay.com/54/103419/

我用的框架是TP5  把sdk 放在了 vendor 文件下  这个sdk 包文件 你们可以放在自己引用第三方文件的文件夹下

下面来看具体操作

在此之前 我们需要知道 appid   支付宝公钥  应用私钥    应用私钥生成方式在  https://docs.open.alipay.com/291/106097


开始代码部分


<?php
namespace app\api\controller;
use think\Controller;
use think\Request;
use think\Db;
use think\cache\driver\Redis;
// 本类由系统自动生成,仅供测试用途
class Alipay extends Sms{
   // 支付宝 appid
    public $appid = '';
    //支付宝公钥
    public $alipayrsaPublicKey= '';
   //支付宝私钥
    public $rsaPrivateKey = '';


    //支付宝同步通知
    public function index(){
        vendor('alipay.aop.AopClient');
        vendor('alipay.aop.request.AlipayTradeAppPayRequest');
        $aop = new \AopClient();
        //异步回调地址
        $aop->gatewayUrl = "https://openapi.alipay.com/gateway.do";
        //appid
        $aop->appId = $this -> appid;
        //本地生成的私钥
        $aop->rsaPrivateKey = $this -> rsaPrivateKey;
        $aop->format = "json";
        $aop->charset = "UTF-8";
        $aop->signType = "RSA2";
        //支付宝公钥
        $aop->alipayrsaPublicKey = $this -> alipayrsaPublicKey;
        $request = new \AlipayTradeAppPayRequest();
        $order_id = input('post.order_sn');
        //根据 order_id  可以知道 订单的业务参数 如:订单总金额
        //订单总金额
        $amount_payable=12;
        $bizcontent = "{\"body\":\"App支付\","//订单描述
            . "\"subject\": \"购买的商品\","//订单标题
            . "\"out_trade_no\": \"{$order_id}\","//商户网站唯一订单号
            . "\"timeout_express\": \"30m\","
            . "\"total_amount\": \"{$amount_payable}\","//订单总金额
            . "\"product_code\":\"QUICK_MSECURITY_PAY\""//固定值
            . "}";
        //异步回调
        $request->setNotifyUrl("http://api.***.com/api/alipaynotify/huidiao");
        $request->setBizContent($bizcontent);
        $response = $aop->sdkExecute($request);
        //给客户端返回的 签名 和 一些订单信息
        die( json_encode( array('status'=>strval( 1 ),'msg'=>'支付成功', 'data'=>$response)) );
    }
    //支付宝回调地址
    public function huidiao(){
        vendor('alipay.aop.AopClient');
        $aop = new \AopClient();
        $aop->alipayrsaPublicKey = $this -> alipayrsaPublicKey;
        $flag = $aop->rsaCheckV1($_POST,NULL,"RSA2");
        if($flag == true){
            //进行业务参数预算  用$_post['']  具体参数可访问支付宝客户端  https://docs.open.alipay.com/204/105301/
           //原支付请求的商户订单号  只需要这一个就可以了  就可 查询订单表
            
            echo 'success';exit;
        }else{
            echo 'false';
        }
    }
    /** 支付宝退款*/
    public function tuikuan()
    {
        vendor('alipay.aop.AopClient');
        vendor('alipay.aop.request.AlipayTradeRefundRequest');
        if (request()->isPost()) {
            $token = input('post.token');
            $redis = new \Redis;
            $redis->connect('127.0.0.1', 6379);
            $id = $redis->get($token);
            $uid = $id;
            if (!empty($uid)) {
                //一下全都是一些业务运算 可忽略
                //订单号
                $order_ns = input('post.order_sn');
                //退款原因
                $reason = input('post.reason');
                //订单商品id
                $product_id = input('post.product_id');
                if (!empty($order_ns) && !empty($reason)) {
                    $str = db("order_info")
                        ->join("tp_order_detail", "tp_order_info.order_info_id=tp_order_detail.order_info_id")
                        ->where("tp_order_info.oid", $order_ns)
                        ->where("tp_order_detail.goods_id", $product_id)
                        ->find();
                
                   //退款金额 不能小于 0 
                    $details = $str['sum_price'];
                    if ($details >= 0) {
                        return json(array(
                            'status' => -1,
                            'msg' => "退款失败1",
                            'data' => "",
                        ));
                    } else {
                        // 退款 从这里正是开始   真正需要的值 是 “订单号 ” 之前支付时 使用的订单号 “退款金额 ” 不可超过支付过的金额 “退款原因”
                        
                        $aop = new \AopClient();
                        $aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do';
                        $aop->appId = $this -> appid;
                        $aop->rsaPrivateKey = $this -> rsaPrivateKey;
                        $aop->alipayrsaPublicKey= $this -> alipayrsaPublicKey;
                        $aop->apiVersion = '1.0';
                        $aop->signType = 'RSA2';
                        $aop->postCharset='UTF-8';
                        $aop->format='json';
                        $request = new \AlipayTradeRefundRequest();
                        $request->setBizContent("{" .
                            "\"out_trade_no\":\"{$order_ns}\"," .
                            "\"trade_no\":\"\"," .
                            "\"refund_amount\":{$details}," .
                            "\"refund_reason\":\"{$reason}\"," .
                            "\"out_request_no\":\"HZ01RF001\"," .
                            "\"operator_id\":\"OP001\"," .
                            "\"store_id\":\"NJ_S_001\"," .
                            "\"terminal_id\":\"NJ_T_001\"" .
                            "  }");
                        $result = $aop->execute($request);
//                       print_r($result);die;
                        $responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";
                        $resultCode = $result->$responseNode->code;
                        if(!empty($resultCode)&&$resultCode == 10000){
                            //退款成功 可以在这里进行 修改 状态 等等一系列操作 
                            
                            return json(array(
                                'status' => 1,
                                'msg' => "退款成功",
                                'data' => "",
                            ));
                     
                        }else {
                            return json(array(
                                'status' => -1,
                                'msg' => "退款失败",
                                'data' => "",
                            ));
                        }
                    }
                }
            }
        }
    }
}

注意啊  回调地址 不能有任何的参数传递 !!!












  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在PHP中进行支付宝沙箱退款,可以使用支付宝提供的SDK和API来实现。首先,你需要引入支付宝SDK,并配置好支付宝的相关参数。然后,你可以使用支付宝提供的退款接口来进行退款操作。 在退款接口中,你需要传入退款的相关参数,包括商户订单号、退款金额等。接口会返回一个退款结果,你可以根据返回的结果来判断退款是否成功。 以下是一个示例代码,展示了如何在PHP中进行支付宝沙箱退款: ```php <?php require_once 'path/to/alipay-sdk-PHP/aop/AopClient.php'; require_once 'path/to/alipay-sdk-PHP/aop/request/AlipayTradeRefundRequest.php'; // 配置支付宝参数 $appId = 'your_app_id'; $gatewayUrl = 'https://openapi.alipaydev.com/gateway.do'; $rsaPrivateKey = 'your_rsa_private_key'; $alipayPublicKey = 'your_alipay_public_key'; // 创建支付宝客户端 $client = new AopClient(); $client->gatewayUrl = $gatewayUrl; $client->appId = $appId; $client->rsaPrivateKey = $rsaPrivateKey; $client->alipayPublicKey = $alipayPublicKey; // 创建退款请求 $request = new AlipayTradeRefundRequest(); $request->setBizContent(json_encode(\[ 'out_trade_no' => 'your_out_trade_no', // 商户订单号 'refund_amount' => 'your_refund_amount', // 退款金额 \])); // 发送退款请求 $response = $client->execute($request); // 处理退款结果 if ($response->code == '10000' && $response->fund_change == 'Y') { // 退款成功 echo '退款成功'; } else { // 退款失败 echo '退款失败'; } ?> ``` 请注意,上述代码中的参数需要根据你的实际情况进行替换。另外,为了使用支付宝沙箱环境进行测试,你需要将`$gatewayUrl`设置为沙箱环境的URL。 希望以上信息对你有帮助! #### 引用[.reference_title] - *1* *2* *3* [支付宝支付-常用支付API详解(查询、退款、提现等)](https://blog.csdn.net/zyw_java/article/details/71844328)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值