" 寇可往, 吾亦可往 “- 用 Yii2 實現對決支付寶的“微信企業付款到零錢” 解決方案 - EasyWeChat 版本

阿北哥ya發表於2017-06-19

支付寶的企業使用者是很方便的,收款後可轉到個人支付寶,然後就進入個人卡了。微信支付預設都是需要對公賬號,T+x結算,那怎麼能像支付寶一樣提現到個人卡,滿足我們這些小老闆那?這就有了"企業付款到零錢"介面,它可能更多是一個策略。

嘮點閒篇兒

看看下面的三個圖(好不容易讓一個草榴網友在國外找到的)

" 寇可往, 吾亦可往 “- 用 Yii2 實現對決支付寶的“微信企業付款到零錢” 解決方案 - EasyWeChat 版本
2014年

" 寇可往, 吾亦可往 “- 用 Yii2 實現對決支付寶的“微信企業付款到零錢” 解決方案 - EasyWeChat 版本
2015年

" 寇可往, 吾亦可往 “- 用 Yii2 實現對決支付寶的“微信企業付款到零錢” 解決方案 - EasyWeChat 版本
2016年

2017年會更多....在小馬哥和小龍哥的帶領下,微信小夥伴充分發揚龍馬精神,尤其支付市場,步步蠶食,好不痛快。

這也是工兵連在講支付的時候先說微信的原因,好了,不多說廢話,畢竟我這是嚴肅的原創技術文章。

啥是“企業付款到零錢”

先貼一個官網說明:“企業付款提供由商戶直接付錢至使用者微信零錢的能力,支援平臺操作及介面呼叫兩種方式,資金到賬速度快,使用及查詢方便。主要用來解決合理的商戶對使用者付款需求,比如:保險理賠、彩票兌換等等。”

" 寇可往, 吾亦可往 “- 用 Yii2 實現對決支付寶的“微信企業付款到零錢” 解決方案 - EasyWeChat 版本
收款頁面圖

對於上述定義,北哥用大白話做下詮釋

  • 這個介面可以程式設計。
  • 錢最後進入了會員的微信零錢包。
  • 基於公眾號配置,需要填寫appId和會員的openid。

於是一個特別好的需求就誕生了,我們現在就做一個後臺會員的打款功能。

開發前的準備工作

首先你必須開通微信支付且擁有“企業付款到零錢”的許可權,進入微信支付 ➭ 產品中心,看看有沒有企業付款到零錢,有就開通它,沒有那就歇菜了~

" 寇可往, 吾亦可往 “- 用 Yii2 實現對決支付寶的“微信企業付款到零錢” 解決方案 - EasyWeChat 版本
看你有沒有

現在開通這個也越來越難了,以前企業賬號都是預設有,現在需要 1、商戶號已入駐90日 2、商戶號有30天連續正常交易。

所以說幹啥都要儘快,要不吃屎都趕不上熱乎的。

點選穿越到微信官方文件

我們需要3個引數和2個證照。

  • appId & mchid & key (引數可以在公眾號後臺找到)
  • cert & key 證照 (微信支付平臺 ➭ 賬戶中心 ➭ API安全 ➭ 下載證照)

下載後證照目錄如下

" 寇可往, 吾亦可往 “- 用 Yii2 實現對決支付寶的“微信企業付款到零錢” 解決方案 - EasyWeChat 版本
證照目錄

我們是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資料表的優化技巧。

好了,就到這裡,有啥不懂的請留言。

(完)

相關文章