2019-08-01 13:42:25
围观(7570)
先到官网下载SDK:https://docs.open.alipay.com/54/106682/
在项目 APP 目录下创建 Packages 目录,在 Packages 目录下再创建一个 alipay 目录,将下载的 sdk 解压进去。
由于我的项目需要区分PC端和手机端 所以取名为 alipaypc.
在config目录下创建个 alipay.php 文件并写入代码:
return [ //应用ID 'app_id' => env('ALIPAY_APPID'), //商户私钥,您的原始格式RSA私钥 'merchant_private_key' => env('ALIPAY_PRIVATE_KEY'), //异步通知地址 需要外网可以访问的地址 'notify_url' => env('ALIPAY_NOTIFY_URL'), //同步跳转 'return_url' => env('ALIPAY_RETURN_URL'), //编码格式 'charset' => "UTF-8", //签名方式 'sign_type'=>"RSA2", //支付宝网关 'gatewayUrl' => "https://openapi.alipay.com/gateway.do", //支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。 'alipay_public_key' => env('ALIPAY_PUBLIC_KEY'), ];
还需要在 .ENV 文件也写入对应的配置信息
打开 composer.json 并写入代码:
"app/Packages/alipaypc"
保存文件后 使用命令行工具执行:
composer dumpautoload
回到 app/Packages/alipaypc 目录,创建一个 Alipay.php 文件并写入代码:
namespace App\Packages\alipaypc; require ('AopSdk.php'); class Alipay { public static function alipays($data) { if (!$data) { exit('param is numm'); } $out_trade_no = $data['order_no']; //订单名称,必填 $subject = $data['order_name']; //付款金额,必填 $total_amount = $data['total_num']; //商品描述,可空 $body = $data['body']; $payRequestBuilder = new \AlipayTradePagePayContentBuilder(); $payRequestBuilder->setBody($body); $payRequestBuilder->setSubject($subject); $payRequestBuilder->setTotalAmount($total_amount); $payRequestBuilder->setOutTradeNo($out_trade_no); $config = config('alipay'); $payResponse = new \AlipayTradeService($config); $response = $payResponse->pagePay($payRequestBuilder,$config['return_url'],$config['notify_url']); return $response; } public static function notify($data) { $config = config('alipay'); $alipaySevice = new \AlipayTradeService($config); $alipaySevice->writeLog(var_export($data,true)); $result = $alipaySevice->check($data); if($result) { //验证成功 //商户订单号 $out_trade_no = $_POST['out_trade_no']; //支付宝交易号 $trade_no = $_POST['trade_no']; //交易状态 $trade_status = $_POST['trade_status']; if($_POST['trade_status'] == 'TRADE_FINISHED') { //根据业务需求返回 return true; } else if ($_POST['trade_status'] == 'TRADE_SUCCESS') { //根据业务需求返回 return true; } return true; }else { return false; } } }
此时已经可以在控制器中调用,控制器中发起支付 代码:
public function pay_test() { //$total_fee = 0.01; $data['order_no'] = time(); $data['order_name'] = '测试'; $data['body'] = '测试'; $data['total_num'] = 0.01; Alipay::alipays($data); }
控制器中执行回调:
public function pay_res(Request $request) { $data = $request->all(); $res = Alipay::notify($data); if($res){ Log::info('msgs' . json_encode($data)); //业务逻辑 return 'success'; }else{ Log::info('error'); //业务逻辑 return 'fail'; } }
注意,此段代码使用了日志 所以需要先 use 一下
use App\Packages\alipaypc\Alipay; use Log;
本文地址 : bubaijun.com/page.php?id=127
版权声明 : 未经允许禁止转载!
上一篇文章: Linux Centos7安装配置SVN
下一篇文章: PHP开发微信支付功能