BBJ不败君

前端萌新&初级后端攻城狮

Laravel引入支付宝支付SDK

发表:2019-08-01 13:42:25

围观(151)

先到官网下载SDK:https://docs.open.alipay.com/54/106682/

在项目 APP 目录下创建 Packages 目录,在 Packages 目录下再创建一个 alipay 目录,将下载的 sdk 解压进去。

由于我的项目需要区分PC端和手机端 所以取名为 alipaypc.

1.png

在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"

2.png

保存文件后 使用命令行工具执行:

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;


本文地址 : www.bubaijun.com/page.php?id=127

版权声明 : 未经允许禁止转载!

评论:我要评论
发布评论:
Copyright © BBJ不败君 粤ICP备18102917号-1