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

支付寶的企業用戶是很方便的,收款後可轉到我的支付寶,而後就進入我的卡了。微信支付默認都是須要對公帳號,T+x結算,那怎麼能像支付寶同樣提現到我的卡,知足咱們這些小老闆那?這就有了"企業付款到零錢"接口,它可能更可能是一個策略。php

嘮點閒篇兒

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

2014年

2015年

2016年

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

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

啥是「企業付款到零錢」

先貼一個官網說明:「企業付款提供由商戶直接付錢至用戶微信零錢的能力,支持平臺操做及接口調用兩種方式,資金到帳速度快,使用及查詢方便。主要用來解決合理的商戶對用戶付款需求,好比:保險理賠、彩票兌換等等。」安全

收款頁面圖

對於上述定義,北哥用大白話作下詮釋服務器

  • 這個接口能夠編程。
  • 錢最後進入了會員的微信零錢包。
  • 基於公衆號配置,須要填寫appId和會員的openid。

因而一個特別好的需求就誕生了,咱們如今就作一個後臺會員的打款功能。微信

開發前的準備工做

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

看你有沒有

如今開通這個也愈來愈難了,之前企業帳號都是默認有,如今須要 一、商戶號已入駐90日 二、商戶號有30天連續正常交易。app

因此說幹啥都要儘快,要不吃屎都趕不上熱乎的。微信公衆平臺

點擊穿越到微信官方文檔

咱們須要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來查詢到零錢包的記錄信息,留給你們本身思考,若是不會請留言。

最後爲什麼開篇說對戰支付寶那,這要追溯下「企業付款到零錢」的歷史了,最開始它是必須先充值才能使用,可是去年年底出了一個運營帳號的概念,你能夠把和客戶交易的錢直接轉到企業付款裏來。

這點改動也許對於微信是想讓你的錢不要出去,仍然在我微信裏玩。但是對於不少好比飯店、小企業而言,這個功能等價因而 公到私,和支付寶殊途同歸,大大的方便了。

阿北曾經給一個飯店老闆作自助訂餐,眼看他天天一、2萬的經過企業付款轉帳到我的微信上來,有機會也給你們講講YII2實現的訂餐系統以及20w數據表的優化技巧。

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

(完)

相關文章
相關標籤/搜索