Skip to content

支付宝 容器内支付

Andy edited this page Jan 11, 2018 · 3 revisions

类似于微信浏览器内支付(JSSDK 支付)

使用前请阅读 https://docs.open.alipay.com/api_1/alipay.trade.create

预下单(统一收单交易创建接口)拿到支付宝的trade_no

  use FantasyStudio\EasyPay\AliPay\JSApi\JSApi;

  $api = new JSApi();
  $api->setSignType("RSA"); //加密方式 支持RSA RSA2 MD5
  $api->setPrivateKey("这里填入私钥内容");
  $api->setPublicKey("这里填入支付宝公钥内容");
  $api->setAppId("填入你的支付宝appid");
  $api->setNotifyUrl("异步通知地址");
  
  $purchase = [
       "out_trade_no" => "20181198281732",
       "total_amount" => "0.1",
       "subject" => "麦当劳汉堡",
       "buyer_id" => $buyer_id, //支付宝oauth后的user_id 2088开头
  ];

  $api->purchase($purchase);
  $result = $api->sendPaymentRequest();
  $raw_data = $result->getResponseData();

  //请求支付宝网关成功,正确返回
  if ($result->isSuccessful()) {
    var_dump($raw_data); //这里包含了支付宝返回的trade_no $raw_data["alipay_trade_create_response"]["trade_no"]
  }

支付宝浏览器内唤起支付

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>支付中</title>
    <script src="https://cdn.bootcss.com/jquery/1.10.0/jquery.min.js"></script>
</head>
<body>
<h2>正在发起支付宝网页支付。。。 请等待</h2>
</body>

<script type="application/javascript">
    // 调试时可以通过在页面定义一个元素,打印信息,使用alert方法不够优雅
  
    $(document).ready(function(){
        // 页面载入完成后即唤起收银台
        // 此处${tradeNO}为模板语言语法,实际调用样例类似为tradePpay("2016072621001004200000000752")
        tradePay("此处填入通过上面预下单操作拿到的trade_no");


        // 通过jsapi关闭当前窗口,仅供参考,更多jsapi请访问
        // /aod/54/104510
        $("#closeButton").click(function() {
            AlipayJSBridge.call('closeWebview');
        });
    });

    // 由于js的载入是异步的,所以可以通过该方法,当AlipayJSBridgeReady事件发生后,再执行callback方法
    function ready(callback) {
        if (window.AlipayJSBridge) {
            callback && callback();
        } else {
            document.addEventListener('AlipayJSBridgeReady', callback, false);
        }
    }

    function tradePay(tradeNO) {
        ready(function(){
            AlipayJSBridge.call("tradePay", {
                tradeNO: tradeNO
            }, function (data) {
                if ("9000" == data.resultCode) {
                    alert("支付成功");
                     
                }
                if("6001" == data.resultCode){
                    alert("支付取消");
                    
                }
                if("4000" == data.resultCode){
                    alert("支付失败");
                }
            });
        });
    }
</script>
</html>