支付宝 容器内支付
Andy edited this page Jan 11, 2018
·
3 revisions
类似于微信浏览器内支付(JSSDK 支付)
使用前请阅读 https://docs.open.alipay.com/api_1/alipay.trade.create
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>