### 運行環境
* PHP 7.0+ (v2.8.0 開始 >= 7.1.3)
* composer
> php5 請使用 v1.x 版本[https://github.com/yansongda/pay/tree/v1.x](https://github.com/yansongda/pay/tree/v1.x)
詳情 請查看 https://github.com/yansongda/pay/tree/v2
### 1、支付寶
* 電腦支付
* 手機網站支付
* APP 支付
* 刷卡支付
* 掃碼支付
* 賬戶轉賬
* 小程序支付
| method | 描述 |
| :-: | :-: |
| web | 電腦支付 |
| wap | 手機網站支付 |
| app | APP 支付 |
| pos | 刷卡支付 |
| scan | 掃碼支付 |
| transfer | 帳戶轉賬 |
| mini | 小程序支付 |
### 2、微信
* 公眾號支付
* 小程序支付
* H5 支付
* 掃碼支付
* 刷卡支付
* APP 支付
* 企業付款
* 普通紅包
* 分裂紅包
| method | 描述 |
| :-: | :-: |
| mp | 公眾號支付 |
| miniapp | 小程序支付 |
| wap | H5 支付 |
| scan | 掃碼支付 |
| pos | 刷卡支付 |
| app | APP 支付 |
| transfer | 企業付款 |
| redpack | 普通紅包 |
| groupRedpack |
## 安裝
**安裝 方式1**
~~~shell
composer require yansongda/pay -vvv
~~~
**安裝 方式2**
執行上面命令或者執行下面

~~~
"yansongda/pay": "^2.10"
~~~
`composer install`
composer install 報錯版本不匹配 或者如下圖
執行 `composer install --ignore-platform-reqs` 忽略版本號

*****
**使用**
下面例子是 laravel8.0 且僅僅用了 h5 和web
app 支付測試 總是報錯 最后使用支付寶 官方提供
~~~
//支付入口
public function alipayIndex(Request $request)
{
$money = $request->money ?? 39.9; //支付金額
$user_id = $request->id ?? null; //用戶ID
$pay_type = $request->pay_type ?? 'h5'; // 支付方式
$out_trade_no = date("YmdHis").rand(10,99).rand(100,999);//訂單號
$alipay_order = [
'out_trade_no' => $out_trade_no,
'total_amount' => $money,
'subject' => 'fenqixin',
];
$config = Config::get("alipay.h5_pay");
$alipay = Pay::alipay($config);
$result = Order::insertOrder($user_id,$money,$out_trade_no,2);
if(!$result) return false;
if($pay_type == 'h5'){
return $alipay->wap($alipay_order);
}
return $alipay->web($alipay_order);
}
~~~
~~~
//支付寶驗簽 h5
public function alipayNoticeApp()
{
$config = Config::get("alipay.h5_pay");
$data = Pay::alipay($config)->verify();
$order_id = $data->out_trade_no;
$money = $data->total_amount;
$where = [
['order_id','=',$order_id],
['money','=',$money]
];
if($data->trade_status == "TRADE_SUCCESS" || $data->trade_status == "TRADE_FINISHED"){
$order_data = Order::query()->where($where)->first();
if($order_data->status == 's') return true;//該訂單 已經處理過 無需更新 訂單 用戶 狀態
Order::query()->where($where)->update(['status' => 's']);//處理訂單成功修改
User::updateUserVipStatus($order_data->user_id);//修改用戶VIP狀態 和 VIP時間
}else{
Order::query()->where($where)->update(['status' => 'f']);
}
return true;
}
~~~
支付寶官方支付
1 下載官方包 放在laravel框架 vendor目錄下

~~~
public function _aliPay($alipay_order,$config)
{
$dir = __DIR__.'/../../../vendor/';//根據自己控制器路徑調整對應位置
require_once $dir.'aop/AopClient.php';
require_once $dir.'aop/request/AlipayTradeAppPayRequest.php';
$aop = new \AopClient;
$aop->gatewayUrl = "https://openapi.alipay.com/gateway.do";
$aop->appId = $config['app_id'];
$aop->rsaPrivateKey = $config['private_key'];
$aop->format = "json";
$aop->charset = "UTF-8";
$aop->signType = "RSA2";
$aop->alipayrsaPublicKey = $config['ali_public_key'];
//實例化具體API對應的request類,類名稱和接口名稱對應,當前調用接口名稱:alipay.trade.app.pay
$req = new \AlipayTradeAppPayRequest();
$notify_url = "https://api-fqx.fenqiqian.com.cn/app/alipay-notice-app-app";
$subject = $alipay_order['subject'];
$body = '訂單詳情';
$out_trade_no = $alipay_order['out_trade_no'];
$money = $alipay_order['total_amount'];
$bizcontent = "{\"body\":\"".$body."\","
. "\"subject\": \"".$subject."\","
. "\"out_trade_no\": \"".$out_trade_no."\","
. "\"timeout_express\": \"30m\","
. "\"total_amount\": \"".$money."\","
. "\"product_code\":\"QUICK_MSECURITY_PAY\""
. "}";
$req->setNotifyUrl($notify_url);
$req->setBizContent($bizcontent);
return $aop->sdkExecute($req);
}
~~~
~~~
//支付寶驗簽 app
public function alipayNoticeAppAPP()
{
$config = Config::get("alipay.app_pay");
$data = Pay::alipay($config)->verify();
$order_id = $data->out_trade_no;
$money = $data->total_amount;
$where = [
['order_id','=',$order_id],
['money','=',$money]
];
DB::table("alipay")->insert(['status' => $order_id]);
DB::table("alipay")->insert(['status' => $money]);
if($data->trade_status == "TRADE_SUCCESS" || $data->trade_status == "TRADE_FINISHED"){
return true;
}
}
~~~
*****
config 配置
~~~
'app_pay' => [
// APPID
'app_id' => '2021002156678492',
// 支付寶 支付成功后 主動通知商戶服務器地址 注意 是post請求
'notify_url' => 'https://api-xxxx.cn/app/alipay-notice-app-app',
// 支付寶 支付成功后 回調頁面 get
// 'return_url' => 'https://xxx/pages/gather/initialSuccess',
// 公鑰(注意是支付寶的公鑰,不是商家應用公鑰)
'ali_public_key' => '',
// 加密方式: **RSA2** 私鑰 商家應用私鑰
'private_key' => "",
// 'http' => [
// 'timeout' => 5.0,
// 'connect_timeout' => 5.0,
// // 更多配置項請參考 [Guzzle](https://guzzle-cn.readthedocs.io/zh_CN/latest/request-options.html)
// ],
]
~~~
- 文檔說明
- 開始
- linux
- 常用命令
- ps -ef
- lsof
- netstat
- 解壓縮
- 復制
- 權限
- 其他
- lnmp集成安裝
- supervisor
- 安裝
- supervisor進程管理
- nginx
- 域名映射
- 負載均衡配置
- lnmp集成環境安裝
- nginx源碼安裝
- location匹配
- 限流配置
- 日志配置
- 重定向配置
- 壓縮策略
- nginx 正/反向代理
- HTTPS配置
- mysql
- navicat創建索引
- 設置外網鏈接mysql
- navicat破解
- sql語句學習
- 新建mysql用戶并賦予權限
- php
- opcache
- 設計模式
- 在CentOS下安裝crontab服務
- composer
- 基礎
- 常用的包
- guzzle
- 二維碼
- 公共方法
- 敏感詞過濾
- IP訪問頻次限制
- CURL
- 支付
- 常用遞歸
- 數據排序
- 圖片相關操作
- 權重分配
- 毫秒時間戳
- base64<=>圖片
- 身份證號分析
- 手機號相關操作
- 項目搭建 公共處理函數
- JWT
- 系統函數
- json_encode / json_decode 相關
- 數字計算
- 數組排序
- php8
- jit特性
- php8源碼編譯安裝
- laravel框架
- 常用artisan命令
- 常用查詢
- 模型關聯
- 創建公共方法
- 圖片上傳
- 中間件
- 路由配置
- jwt
- 隊列
- 定時任務
- 日志模塊
- laravel+swoole基本使用
- 拓展庫
- 請求接口log
- laravel_octane
- 微信開發
- token配置驗證
- easywechart 獲取用戶信息
- 三方包
- webman
- win下熱更新代碼
- 使用laravel db listen 監聽sql語句
- guzzle
- 使用workman的httpCLient
- 修改隊列后代碼不生效
- workman
- 安裝與使用
- websocket
- eleticsearch
- php-es 安裝配置
- hyperf
- 熱更新
- 安裝報錯
- swoole
- 安裝
- win安裝swoole-cli
- google登錄
- golang
- 文檔地址
- 標準庫
- time
- 數據類型
- 基本數據類型
- 復合數據類型
- 協程&管道
- 協程基本使用
- 讀寫鎖 RWMutex
- 互斥鎖Mutex
- 管道的基本使用
- 管道select多路復用
- 協程加管道
- beego
- gin
- 安裝
- 熱更新
- 路由
- 中間件
- 控制器
- 模型
- 配置文件/conf
- gorm
- 初始化
- 控制器 模型查詢封裝
- 添加
- 修改
- 刪除
- 聯表查詢
- 環境搭建
- Windows
- linux
- 全局異常捕捉
- javascript
- 常用函數
- vue
- vue-cli
- 生產環境 開發環境配置
- 組件通信
- 組件之間通信
- 父傳子
- 子傳父
- provide->inject (非父子)
- 引用元素和組件
- vue-原始寫法
- template基本用法
- vue3+ts項目搭建
- vue3引入element-plus
- axios 封裝網絡請求
- computed 計算屬性
- watch 監聽
- 使用@符 代替文件引入路徑
- vue開發中常用的插件
- vue 富文本編輯
- nuxt
- 學習筆記
- 新建項目踩坑整理
- css
- flex布局
- flex PC端基本布局
- flex 移動端基本布局
- 常用css屬性
- 盒子模型與定位
- 小說分屏顯示
- git
- 基本命令
- fetch
- 常用命令
- 每次都需要驗證
- git pull 有沖突時
- .gitignore 修改后不生效
- 原理解析
- tcp與udp詳解
- TCP三次握手四次揮手
- 緩存雪崩 穿透 更新詳解
- 內存泄漏-內存溢出
- php_fpm fast_cgi cig
- redis
- 相關三方文章
- API對外接口文檔示范
- elaticsearch
- 全文檢索
- 簡介
- 安裝
- kibana
- 核心概念 索引 映射 文檔
- 高級查詢 Query DSL
- 索引原理
- 分詞器
- 過濾查詢
- 聚合查詢
- 整合應用
- 集群
- docker
- docker 簡介
- docker 安裝
- docker 常用命令
- image 鏡像命令
- Contrainer 容器命令
- docker-compose
- redis 相關
- 客戶端安裝
- Linux 環境下安裝
- uni
- http請求封裝
- ios打包
- 視頻縱向播放
- 日記
- 工作日記
- 情感日志
- 壓測
- ab
- ui
- thorui
- 開發規范
- 前端
- 后端
- 狀態碼
- 開發小組未來規劃