流水文档 - 支付宝支付 (php)版本

497 阅读1分钟

laravel下接入支付宝,相对来说比较简单,简单记录下

1. 到支付宝商户页面申请应用及相关支付权限

获得如下

  • APPID
  • 公钥和私钥

2. 下载SDK

  • 文档地址
  • 将sdk导入到laravel,需要改2个地方
    • 一是AopClient有行代码有问题,注释掉
    • AopEncrypt.php里函数和Laravel的冲突了,我是把AopEncrypt干掉了

3. DEMO

APP,WEB,WAP三种目前,流程都是一样的

  • 构造aopClient
  • 构造对应request
  • 发送到支付宝网关获得相关凭证
    • 对于web,wap直接echo即可。如果在微信客户端网页,支付宝文档上有说如果引导用户跳转到系统浏览器完成支付
    • 对于app返回给客户端,由客户端唤出支付宝app的支付流程
#  require alipay sdk

require_once ('alipay-sdk/aop/AopClient.php');
require_once ('alipay-sdk/aop/request/AlipayTradeAppPayRequest.php');
require_once ('alipay-sdk/aop/request/AlipayTradePagePayRequest.php');
require_once ('alipay-sdk/aop/request/AlipayTradeWapPayRequest.php');


class PaymentController extends Controller{
    const config_ali_web = [
        "gateway" => "https://openapi.alipay.com/gateway.do",
        "app_id" => "",
        "return_url" => "",
        "notify_url" => "",
    ];
    
    public function aliWebConfig($payment){
        $title = $payment["title"];
        $price = $payment["price"];
        $description = $payment["description"];
        $orderId = $payment["order_id"];
        $paymentId = $payment["payment_id"];

        $aopClient = self::createAliClient();

        $bizContent = [
            "body" => $description,
            "subject" => urldecode($title),
            "out_trade_no" => $orderId."_".$paymentId,
            "timeout_express" => "30m",
            "total_amount" => $price,
            "product_code" => "FAST_INSTANT_TRADE_PAY",
        ];

        $request = new \AlipayTradePagePayRequest();
        $request->setNotifyUrl(PaymentController::config_ali_web['notify_url']);
        $request->setReturnUrl(PaymentController::config_ali_web['return_url']);
        $request->setBizContent(json_encode($bizContent));

        $response = $aopClient->pageExecute($request);
        return $response;
    }
    
    
    public function aliH5Config($payment){
        # 这里只列出区别
        $bizContent = [
            "product_code" => "QUICK_WAP_WAY",
        ];
        $request = new \AlipayTradeWapPayRequest();
        
        $response = $aopClient->pageExecute($request);
        return $response;
    }
    
    public function aliAppConfig($payment){
        # 这里只列出区别
        $bizContent = [
            "product_code" => "APP_PAY",
        ];

        $request = new \AlipayTradeAppPayRequest();
        $response = $aopClient->sdkExecute($request);
        return $response;
    }
    
    
    private function createAliClient(){
        $c = new \AopClient();
        $c->gatewayUrl = PaymentController::config_ali_web['gateway'];
        $c->appId = PaymentController::config_ali_web['app_id'];
        # 把私钥放到storage下,之前直接写到.env会出现读取截断问题,放文件里保险
        $c->rsaPrivateKeyFilePath = storage_path(env("ALI_RSA_PATH",""));
        $c->format = "json";
        $c->charset= "UTF-8";
        $c->signType= "RSA2";
        # 公钥直接写到.env配置里
        $c->alipayrsaPublicKey = env("ALI_PUB","");
        return $c;
    }
}



以上~