首先去 支付宝 下载sdk
我下载的SDK放在第三方vendor中如下:
放入地址以后给alipay权限:
sudo chmod -R 777 alipay
放入vendor以后在composer.json 加入以下内容:
在composer加入classmap以后执行如下代码
composer dump-autoload
完成以后在app 同级目录 config 下面创建配置文件我的是alipay.php
配置文件中的内容如下:
<?php
return [
'alipayApp' => [
//应用ID,您的APPID。
'app_id' => env('ALIPAY_APPID',"去支付宝获取"),
//支付宝网关
'gatewayUrl' => env('ALIPAY_GATEWAY_URL',"去支付宝获取"),
//商户私钥,您的原始格式RSA私钥
'merchant_private_key' => env('MERCHANT_PRIVATE_KEY',"去支付宝获取"),
//支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。
'alipay_public_key' => env('ALIPAY_PUBLIC_KEY',"去支付宝获取"),
//异步通知地址
'notify_url' => env('ALIPAY_APP_NOTIFY_URL','下面红色字体下的内容'),
//编码格式
'charset' => "UTF-8",
//签名方式
'sign_type' => "RSA2",
//返回数据格式
'format' => "json",
// 付款时间
'timeout_express' => '30m',
// 商户uid
'seller_id' => env('SELLER_ID','自己获取'),
]
];
(自己配置回调地址路由)代码如下:
$API = config('config.alipayApp'); // 调用支付宝配置文件
$Client = new \AopClient(); // 实例化类
$Client->alipayrsaPublicKey = $API['alipay_public_key'];
$parm = $_POST;
Redis::setex('alipayRedis',3600,serialize($parm));
// 验证签名
$flag = $Client->rsaCheckV1($parm,NULL,"RSA2");
if($flag){
if ($parm['trade_status'] == 'TRADE_SUCCESS' || $parm['trade_status'] == 'TRADE_FINISHED') {
// 此处为自己业务逻缉处理
DB::table('bk_goods_info')->insert([
'order_no'=>$parm['out_trade_no'], // 交易订单号
'pay_platform'=>1, // 支付类型 1:支付宝 2:微信
'platform_status'=>'成功' // 是否支付
]);
GoodsOrderModel::where(['order_no'=>$parm['out_trade_no']])->update([
'status'=>20, // 订单状态:0-已取消,10-未付款,20-已付款,40-已发货,50-交易成功,60-交易关闭
'payment_time'=>time(), // 付款时间
'postage'=>0, // 运费,单位是元
]);
echo 'success';
}
}
支付接口代码:
public function alipay()
{
// $orderId = request()->input('orderId');
// $subject = request()->input('subject');
// $expire = config('config.alipayApp.timeout_express');
// $body = request()->input('body');
// $total_amount = request()->input('total_amount');
// "{\"body\":\"{$body}\"," //支付商品描述
// . "\"subject\":\"{$subject}\"," //支付商品的标题
// . "\"out_trade_no\":\"{$orderId}\"," //商户网站唯一订单号
// . "\"timeout_express\":\"{$expire}m\"," //该笔订单允许的最晚付款时间,逾期将关闭交易。取值范围:1m~15d。m-分钟,h-小时,d-天,1c-当天(1c-当天的情况下,无论交易何时创建,都在0点关闭)。 该参数数值不接受小数点, 如 1.5h,可转换为 90m。
// //注:若为空,则默认为15d。
// . "\"total_amount\":\"{$total_amount}\"," //订单总金额,单位为元,精确到小数点后两位,取值范围[0.01,100000000]
// . "\"product_code\":\"QUICK_MSECURITY_PAY\""
// . "}"
try{
$aop = new \AopClient();
$aop->gatewayUrl = config('config.alipayApp.gatewayUrl'); // 支付宝网关
$aop->appId = config('config.alipayApp.app_id'); // app_id
$aop->rsaPrivateKey = config('config.alipayApp.merchant_private_key'); // 私钥
$aop->alipayrsaPublicKey = config('config.alipayApp.alipay_public_key'); // 公钥
$aop->format= 'json';//固定
$aop->charset = config('config.alipayApp.charset'); // 编码
$aop->signType = config('config.alipayApp.sign_type'); // 签名类型
$request = new \AlipayTradeAppPayRequest();
//SDK已经封装掉了公共参数,这里只需要传入业务参数
$bizcontent = "{\"body\":\"我是测试数据\","
. "\"subject\": \"App支付测试\","
. "\"out_trade_no\": \"" . time() . "123456\","
. "\"timeout_express\": \"30m\","
. "\"total_amount\": \"0.01\","
. "\"product_code\":\"QUICK_MSECURITY_PAY\""
. "}";
$request->setNotifyUrl(config('config.alipayApp.notify_url'));
$request->setBizContent($bizcontent);
//这里和普通的接口调用不同,使用的是sdkExecute
$response = $aop->sdkExecute($request);
//htmlspecialchars是为了输出到页面时防止被浏览器将关键参数html转义,实际打印到日志以及http传输不会有这个问题
// return htmlspecialchars($response);//就是orderString 可以直接给客户端请求,无需再做处理。
return $response;
}catch(Exception $e){
//失败返回false
return false;
}
laravel框架支付功能就完成啦。。。
(纯属爱好就当作日记 把遇到的问题记录一下 有问题请留言)