评论

PHP项目微信提现功能

本文给大家讲解php项目实现微信提现功能的教程,文中附带了部分实现功能的代码,看完本文大家一定会有所收获

第一步:使用composer安装EasyWeChat

https://www.easywechat.com/docs/3.x/installation

第二步:在前面我们已经讲过,初始化 SDK 的时候方法就是创建一个

 EasyWeChat\Foundation\Application 实例:

use EasyWeChat\Foundation\Application;
$options = [
   // ...];
$app = new Application($options);
/**
* 如果想要在Application实例化完成之后, 修改某一个options的值,
* 比如服务商+子商户支付回调场景, 所有子商户订单支付信息都是通过同一个服务商的$option 配置进来的,
* 当oauth在微信端验证完成之后, 可以通过动态设置merchant_id来区分具体是哪个子商户
*/$app['config']->set('oauth.callback','wechat/oauthcallback/'. $sub_merchant_id->id);

那么配置的具体选项有哪些,下面是一个完整的列表:

<?php
return [
    /**
     * 账号基本信息,请从微信公众平台/开放平台获取
     */
    'app_id'  => 'your-app-id',         // AppID
    'secret'  => 'your-app-secret',     // AppSecret
    'token'   => 'your-token',          // Token
    'aes_key' => '',                    // EncodingAESKey,安全模式与兼容模式下请一定要填写!!!
    /**
     * OAuth 配置
     *
     * scopes:公众平台(snsapi_userinfo / snsapi_base),开放平台:snsapi_login
     * callback:OAuth授权完成后的回调页地址
     */
    'oauth' => [
        'scopes'   => ['snsapi_userinfo'],
        'callback' => '/examples/oauth_callback.php',
    ],
    /**
     * 微信支付
     */
    'payment' => [
        'merchant_id'        => 'your-mch-id',
        'key'                => 'key-for-signature',
        'cert_path'          => 'path/to/your/cert.pem', // XXX: 绝对路径!!!!
        'key_path'           => 'path/to/your/key',      // XXX: 绝对路径!!!!
    ],
     * 更多请参考: http://docs.guzzlephp.org/en/latest/request-options.html
     */
    'guzzle' => [
        'timeout' => 3.0, // 超时时间(秒)
    ],];

第三步:使用EasyWeChat完成提现到零钱功能(企业付款到零钱)

你在阅读本文之前确认你已经仔细阅读了:微信支付 | 企业付款文档 

与其他支付接口一样,企业支付接口也需要配置如下参数,需要特别注意的是,企业支付相关的全部接口 都需要使用 SSL 证书,因此 cert_path 以及 cert_key 必须正确配置

<?php
use EasyWeChat\Foundation\Application;
$options = [
    'app_id' => 'your-app-id',
    // payment
    'payment' => [
        'merchant_id'        => 'your-mch-id',
        'key'                => 'key-for-signature',
        'cert_path'          => 'path/to/your/cert.pem',
        'key_path'           => 'path/to/your/key',
        // ...
    ],];
$app = new Application($options);
$merchantPay = $app->merchant_pay;

企业付款

企业付款使用的余额跟微信支付的收款并非同一账户,请注意充值。

<?php
$merchantPayData = [
        'partner_trade_no' => str_random(16), //随机字符串作为订单号,跟红包和支付一个概念。
        'openid' => $openid, //收款人的openid
        'check_name' => 'NO_CHECK',  //文档中有三种校验实名的方法 NO_CHECK OPTION_CHECK FORCE_CHECK
        're_user_name'=>'张三',     //OPTION_CHECK FORCE_CHECK 校验实名的时候必须提交
        'amount' => 100,  //单位为分
        'desc' => '企业付款',
        'spbill_create_ip' => '192.168.0.1',  //发起交易的IP地址
    ];
$result = $merchantPay->send($merchantPayData);


查询付款信息

用于商户对已发放的企业支付进行查询企业支付的具体信息。

$partnerTradeNo = "商户系统内部的订单号(partner_trade_no)";
$merchantPay->query($partnerTradeNo);


这里以crmeb知识付费系统为例的微信功能基本类extend\service\WechatService;按照文档说明我们在WechatService类中添加企业付款的接口,接口名称为merchantPayService,若是存在就不需要添加;

/**
 * 企业付款
 * @return \EasyWeChat\Material\Material
 */
public static function merchantPayService()
{
    return self::application()->merchant_pay;
}


那么我们所需要的就是调用merchantPayService方法里的send方法,并且传入我们转账的参数即可。

我们需要把功能加到提现审核通过之后执行。admin\model\user\UserExtract;找到这个类中的changeSuccess方法,这个方法是审核通过后的相关操作。

(1).先引入WechatService;

use service\WechatService;

(2).changeSuccess方法里加下面代码,并且根据最后的返回判断企业付款是否成功。

$payData = [
    'partner_trade_no' => str_random(16), //随机字符串作为订单号,跟红包和支付一个概念。
    'openid' => $openid, //收款人的openid
    'check_name' => 'NO_CHECK',  //文档中有三种校验实名的方法 NO_CHECK OPTION_CHECK FORCE_CHECK
    're_user_name'=>'张三',     //OPTION_CHECK FORCE_CHECK 校验实名的时候必须提交
    'amount' => 100,  //单位为分
    'desc' => '企业付款',
    'spbill_create_ip' => '192.168.0.1',  //发起交易的IP地址
];
$result=WechatService::merchantPayService()->send($payData);


点赞 0
收藏
评论
登录 后发表内容