最近在使用laravel框架做一款小程序后臺(tái),要使用到微信用戶(hù)提現(xiàn)到零錢(qián)包功能,在網(wǎng)上翻了一下大多都是用戶(hù)下單支付給企業(yè)的教程,針對(duì)企業(yè)付款給用戶(hù)的教程很少,特別是支付回調(diào)功能有個(gè)坑,浪費(fèi)了不少時(shí)間。
第一步:
1.安裝包文件:(如果使用更高版本,請(qǐng)查看easywechat文檔)
```
composer require "overtrue/laravel-wechat:~4.0"
```
注冊(cè)ServiceProvider:在config下的app.php中的 providers 數(shù)組中添加:
```
Overtrue\LaravelWechat\ServiceProvider::class,
```
創(chuàng)建配置文件:在命令行中執(zhí)行
```
php artisan vendor:publish --provider="Overtrue\LaravelWechat\ServiceProvider"
```
第二步:
統(tǒng)一下單
沒(méi)錯(cuò),什么 H5 支付,公眾號(hào)支付,掃碼支付,全部都是用這個(gè)接口下單。
在控制器內(nèi)引用
```
<?php
namespace App\Http\Controllers\Dashboard;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use EasyWeChat\Factory;//引入支付門(mén)面類(lèi)
use DB;
class WithdrawController extends Controller {
? ? public function transferToUser($id,Request $request){
? ? ? ? $config = [
? ? // 必要配置
? ? 'app_id'? ? ? ? ? ? => 'XXXX',//微信appid
? ? 'mch_id'? ? ? ? ? ? =>'XXXX',//商戶(hù)id
? ? 'key'? ? ? ? ? ? ? ? => 'XXXX',? // API 密鑰
? ? // 如需使用敏感接口(如退款、發(fā)送紅包等)需要配置 API 證書(shū)路徑(登錄商戶(hù)平臺(tái)下載 API 證書(shū))
? ? 'cert_path'? ? ? ? ? => base_path().'/public/cert/apiclient_cert.pem', // XXX: 絕對(duì)路徑?。。?!
? ? ? ? ? ? 'key_path'? ? ? ? ? => base_path().'/public/cert/apiclient_key.pem',? ? ? // XXX: 絕對(duì)路徑!?。?!
];
$app = Factory::payment($config);
$result=$app->transfer->toBalance([
? ? 'partner_trade_no' =>'SN12345678XXXXXXXXXX', //特別注意這里,參數(shù)跟用戶(hù)支付給企業(yè)out_trade_no區(qū)分開(kāi)來(lái),這里可以使用隨機(jī)字符串作為訂單號(hào),跟紅包和支付一個(gè)概念。
? ? ? ? 'openid' => 'XXXXX', //收款人的openid
? ? ? ? 'check_name' => 'FORCE_CHECK',? //文檔中有三種校驗(yàn)實(shí)名的方法 NO_CHECK不校驗(yàn) OPTION_CHECK參數(shù)校驗(yàn) FORCE_CHECK強(qiáng)制校驗(yàn)
? ? ? ? 're_user_name'=>'',? ? //OPTION_CHECK FORCE_CHECK 校驗(yàn)實(shí)名的時(shí)候必須提交
? ? ? ? 'amount' =>'XXXX',? //單位為分
? ? ? ? 'desc' => '錢(qián)包提現(xiàn)',
? ? ? ? 'spbill_create_ip' => '39.108.XXX.VVV',? //發(fā)起交易的服務(wù)器IP地址
]);
? ? if($result['result_code']=='SUCCESS'){
? ? //這里寫(xiě)支付成功相關(guān)邏輯,更新數(shù)據(jù)庫(kù)訂單狀態(tài)為已付款,給用戶(hù)推送到賬模板消息,短信通知用戶(hù)等
? ? }else{
? ? ? ? ? ? //支付失敗相關(guān)回調(diào)處理
? ? ? ? }
? ? }
}
```
至此整個(gè)企業(yè)付款到零錢(qián)的功能就實(shí)現(xiàn)了。
這里要注意的是企業(yè)付款到用戶(hù)零錢(qián)是沒(méi)有回調(diào)通知的,如果要二次確認(rèn)款項(xiàng)是否到賬可以調(diào)用下面方法
```
//查詢(xún)付款到零錢(qián)的訂單
public function queryOrder(){
$config = [
? ? // 必要配置
? ? 'app_id'? ? ? ? ? ? => 'XXXX',//微信appid
? ? 'mch_id'? ? ? ? ? ? =>'XXXX',//商戶(hù)id
? ? 'key'? ? ? ? ? ? ? ? => 'XXXX',? // API 密鑰
? ? // 如需使用敏感接口(如退款、發(fā)送紅包等)需要配置 API 證書(shū)路徑(登錄商戶(hù)平臺(tái)下載 API 證書(shū))
? 'cert_path'? ? ? ? ? => base_path().'/public/cert/apiclient_cert.pem', // XXX: 絕對(duì)路徑!?。?!
? ? 'key_path'? ? ? ? ? => base_path().'/public/cert/apiclient_key.pem',? ? ? // XXX: 絕對(duì)路徑?。。?!
];
? ? ? $app = Factory::payment($config);
? ? ? $partnerTradeNo = 1233455;
? ? ? $app->transfer->queryBalanceOrder($partnerTradeNo);
}
```