1. 程式人生 > >ThinkPHP5.0整合支付寶掃碼支付(PC端)

ThinkPHP5.0整合支付寶掃碼支付(PC端)

相關文章:ThinkPHP5.0整合微信掃碼支付(PC端)
 

搞完了微信搞支付寶~~~

還是先下載支付寶電腦網站支付demo,目錄結構如下:

把demo資料夾放到tp5的 vendor 資料夾下面,重新命名為alipay:

配置 config.php 的支付引數,去螞蟻金服商家中心找,或者使用沙箱測試環境。注意簽名方式要和私鑰、公鑰的簽名方式相同。

<?php
$config = array (	
	//APPID。
	'app_id' => "xxx",

	//商戶私鑰
	'merchant_private_key' => "xxx",
	
	//非同步通知地址
	'notify_url' => "https://www.oyhdo.com/alipay/alinotify",
	
	//同步跳轉
	'return_url' => "https://www.oyhdo.com/alipay/alinotify",

	//編碼格式
	'charset' => "UTF-8",

	//簽名方式
	'sign_type'=>'RSA2',

	//支付寶閘道器 (我使用的沙箱環境)
	'gatewayUrl' => "https://openapi.alipaydev.com/gateway.do",
        //'gatewayUrl' => "https://openapi.alipay.com/gateway.do",

	//支付寶公鑰,檢視地址:https://openhome.alipay.com/platform/keyManage.htm 對應APPID下的支付寶公鑰。
	'alipay_public_key' => "xxx",
);

設定 log.txt 許可權為777,以便記錄日誌。

Alipay.php控制器:

<?php
namespace app\index\controller;
use think\Controller;
class Alipay extends Controller
{
    public function index(){
        header("Content-type:text/html;charset=utf-8");
        
        $total_amount = input('post.total_amount');
        if($total_amount){
            //引入支付寶支付
            require_once VENDOR_PATH.'/alipay/config.php';
            require_once VENDOR_PATH.'/alipay/pagepay/service/AlipayTradeService.php';
            require_once VENDOR_PATH.'/alipay/pagepay/buildermodel/AlipayTradePagePayContentBuilder.php';

            //商戶訂單號,商戶網站訂單系統中唯一訂單號,必填
            $out_trade_no = input('post.out_trade_no');

            //訂單名稱,必填
            $subject = input('post.goods_name');

            //付款金額,必填
            $total_amount = $total_amount;

            //商品描述,可空
            $body = input('post.goods_body');

            //構造引數
            $payRequestBuilder = new \AlipayTradePagePayContentBuilder();
            $payRequestBuilder->setBody($body);
            $payRequestBuilder->setSubject($subject);
            $payRequestBuilder->setTotalAmount($total_amount);
            $payRequestBuilder->setOutTradeNo($out_trade_no);

            //電腦網站支付請求
            $aop = new \AlipayTradeService($config);
            $response = $aop->pagePay($payRequestBuilder,$config['return_url'],$config['notify_url']);

            //輸出表單
            var_dump($response);
        }else{
            $out_trade_no = 'ALPAY'.date('YmdHis'); //訂單號
            $goods_name = '線上支付'; //商品名稱
            $goods_body = 'test'; //商品描述

            $this->assign('out_trade_no',$out_trade_no);
            $this->assign('goods_name',$goods_name);
            $this->assign('goods_body',$goods_body);
            return view();
        }
    }
}

前臺測試頁面:

<!DOCTYPE html>
<html>
<head>
<title>alipay_test</title>
</head>
<body>
<form name=alipayment action="{:url('Alipay/index')}" method="post" target="_blank">
	商戶訂單號:<input type="text" name="out_trade_no" value="{$out_trade_no}" /><br/>
	訂單名稱:<input type="text" name="goods_name" value="{$goods_name}"/><br/>
	付款金額:<input type="text" name="total_amount" /><br/>
	商品描述:<input type="text" name="goods_body" value="{$goods_body}"/><br/>
	<button type="submit">付 款</button>
</form>
</body>
</html>


掃碼支付: 

支付成功: