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;
}
}
复制代码
以上~