支付寶的企業使用者是很方便的,收款後可轉到個人支付寶,然後就進入個人卡了。微信支付預設都是需要對公賬號,T+x結算,那怎麼能像支付寶一樣提現到個人卡,滿足我們這些小老闆那?這就有了"企業付款到零錢"介面,它可能更多是一個策略。
嘮點閒篇兒
看看下面的三個圖(好不容易讓一個草榴網友在國外找到的)
2017年會更多....在小馬哥和小龍哥的帶領下,微信小夥伴充分發揚龍馬精神,尤其支付市場,步步蠶食,好不痛快。
這也是工兵連在講支付的時候先說微信的原因,好了,不多說廢話,畢竟我這是嚴肅的原創技術文章。
啥是“企業付款到零錢”
先貼一個官網說明:“企業付款提供由商戶直接付錢至使用者微信零錢的能力,支援平臺操作及介面呼叫兩種方式,資金到賬速度快,使用及查詢方便。主要用來解決合理的商戶對使用者付款需求,比如:保險理賠、彩票兌換等等。”
對於上述定義,北哥用大白話做下詮釋
- 這個介面可以程式設計。
- 錢最後進入了會員的微信零錢包。
- 基於公眾號配置,需要填寫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來查詢到零錢包的記錄資訊,留給大家自己思考,如果不會請留言。
最後為何開篇說對戰支付寶那,這要追溯下“企業付款到零錢”的歷史了,最開始它是必須先充值才能使用,但是去年年末出了一個運營賬號的概念,你可以把和客戶交易的錢直接轉到企業付款裡來。
這點改動也許對於微信是想讓你的錢不要出去,仍然在我微信裡玩。可是對於很多比如飯店、小企業而言,這個功能等價於是 公到私,和支付寶異曲同工,大大的方便了。
阿北曾經給一個飯店老闆做自助訂餐,眼看他每天1、2萬的通過企業付款轉賬到個人微信上來,有機會也給大家講講YII2實現的訂餐系統以及20w資料表的優化技巧。
好了,就到這裡,有啥不懂的請留言。
(完)