啥是“企業付款到零錢”
對於上述定義,北哥用大白話做下詮釋
- 這個接口可以編程。
- 錢最後進入了會員的微信零錢包。
- 基於公衆號配置,需要填寫appId和會員的openid。
於是一個特別好的需求就誕生了,我們現在就做一個後臺會員的打款功能。
開發前的準備工作
首先你必須開通微信支付且擁有“企業付款到零錢”的權限,進入微信支付 ➭ 產品中心,看看有沒有企業付款到零錢,有就開通它,沒有那就歇菜了~
現在開通這個也越來越難了,以前企業賬號都是默認有,現在需要 1、商戶號已入駐90日 2、商戶號有30天連續正常交易。
所以說幹啥都要儘快,要不吃屎都趕不上熱乎的。
我們需要3個參數和2個證書。
- appId & mchid & key (參數可以在公衆號後臺找到)
- cert & key 證書 (微信支付平臺 ➭ 賬戶中心 ➭ API安全 ➭ 下載證書)
下載後證書目錄如下
我們是PHP環境,所以需要使用其中的apiclient_cert.pem、apiclient_key.pem以及rootca.pem這3個,將這些證書文件保存到你服務器上,最好不要放到web下,放到@app下比較安全。
可以如我所做。
// 配置文件conf/params.php
return [
'WECHAT'=>[
/**
* Debug 模式,bool 值:true/false
*
* 當值爲 false 時,所有的日誌都不會記錄
*/
'debug' => true,
/**
* 賬號基本信息,請從微信公衆平臺/開放平臺獲取
*/
'app_id' => '必須要', // AppID
'secret' => '不是必須的', // AppSecret
'token' => '不是必須的', // Token
'aes_key' => '',
...
'payment' => [
'merchant_id' => '必須要',
'key' => '必須要',
'cert_path' => 'path/to/your/cert.pem'//必須
'key_path' => 'path/to/your/key'//必須
],
],
];
app_id、merchant_id、key、cert_path、key_path都是必須填寫的,其中cert_path和key_path需要有效的物理路徑。
我將證書放到了yii2程序根目錄 /cert文件夾。因此如上路徑配置。
開始打款
我們假設指定一個action來做打款的,使用EasyWeChat後代碼變的更加簡單。
// index.php?r=admin/user/send-money
namespace app\modules\admin\controllers;
use yii\web\Controller;
use EasyWeChat\Foundation\Application;
use Yii;
class UserController extends Controller {
....
/**
* 給id會員微信打款
* $params $money
*/
public function actionSendMoney($id,$money){
$user = User::findOne($id);
// 配置支付參數
$conf = Yii::$app->params['WECHAT'];
$wxApp = new Application($config);
// 初始化微信企業支付對象
$merchantPay = $wxApp->merchant_pay;
// 初始化支付到零錢包訂單信息
$merchantPayData = [
//隨機字符串作爲訂單號,跟紅包和支付一個概念。
'partner_trade_no' => str_random(16),
'openid' => $user->open_id,
'check_name' => 'NO_CHECK',
'amount' => $money*100, //單位爲分
'desc' => "打款秒殺",
'spbill_create_ip' =>$_SERVER['REMOTE_ADDR']
];
$result = $merchantPay->send($merchantPayData);
//$result['result_code']是否爲SUCCESS 來判斷是否成功,如果失敗則信息再$result['err_code_des']內。
}
...
}
我們看到了,經過EasyWeChat封裝後的企業付款到零錢包變的非常簡潔,配置一些必填項,然後傳給 $merchantPay->send 即可。
返回的 $result 和官方文檔一致。開啓穿越
當然還是要有些注意的地方
- spbill_create_ip 很多時候你本地調試發現不成功都是因爲這個導致的
- amount 企業付款金額最少爲1元,就是說amount最少是100,微信支付裏金額的單位都是分。
- desc 這個字段不要亂寫,在接收者微信零錢明細列表中會是 “企業付款:你的desc”
我們還可以通過EasyWechat來查詢到零錢包的記錄信息,留給大家自己思考,如果不會請留言。