用Yii2實現對決支付寶的“微信企業付款到零錢”解決方案 - EasyWeChat版本

啥是“企業付款到零錢”

客戶收到的款的樣子

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

  • 這個接口可以編程。
  • 錢最後進入了會員的微信零錢包。
  • 基於公衆號配置,需要填寫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來查詢到零錢包的記錄信息,留給大家自己思考,如果不會請留言。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章