PHP商城项目开发中实现微信提现到零钱功能详解

时间:2022-11-14 16:21:03

前言

在微信公众号/小程序商城项目中,经常会遇到佣金、余额提现的需求,那么在微信商城项目中,怎么实现让用户微信提现到零钱这个功能?相信很多同学都遇到了这个问题,具体开发过程中怎么解决这个问题,请看小编给大家带来的微信提现方法介绍,希望对您有所帮助!

第一步:使用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);
那么配置的具体选项有哪些,下面是一个完整的列表:
'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 必须正确配置。

'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;

企业付款

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

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);