上篇博文《开发微信企业付款到零钱步骤详解》已经进行对这些功能进行过的描述和一些步骤的描写。这个和开发企业付款到银行卡的开发步骤基本一致,不过这个有开通微信企业付款到零钱有点要求:1、商户号(或同主体其他非服务商商户号)已入驻90日;2、商户号(或同主体其他非服务商商户号)有30天连续正常交易;3、 登录微信支付商户平台-产品中心,开通企业付款。。关于其他的一些说明可以查看开发文档。
开发步骤基本也是先开通产品、然后下载API安全证书、获取RSA加密公钥、进行RSA公钥转码、开发代码。
上篇博文中的部分代码可以复用,只有进行调用付款API的时候有所不同。微信企业付款到零钱需要用户的openId才能进行调用功能接口。
/**
* 企业付款到微信零钱
* @param string $openid 用户openid
* @param float $amount 企业付款金额,单位为分
* @param string $partner_trade_no 商户订单号,需保持唯一性(只能是字母或者数字,不能包含有符号)
* @return array
*/
public function WxPayToPersonal($openid, $amount, $partner_trade_no)
{
$transfer = [
'mch_appid' => $this->mch_appid,
'mchid' => $this->mch_id,
'nonce_str' => self::CreateNonceStr(),
'partner_trade_no' => $partner_trade_no,
'openid' => $openid,
'check_name' => 'NO_CHECK',
'amount' => $amount,
'desc' => "提现处理!",
'spbill_create_ip' => self::GetClientIP(),
];
$transfer['sign'] = self::MakeSign($transfer, $this->api_key);
$xml = self::ArrayToXml($transfer);
$url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers";
$data = self::CurlPostSsl($url, $xml, $this->certificate_path);
return self::XmlToArray(strstr($data, ''));
}
/**
* 获取终端真实IP
* @return string IP地址
*/
public function GetClientIP()
{
if (getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) {
$ip = getenv('HTTP_CLIENT_IP');
} elseif (getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) {
$ip = getenv('HTTP_X_FORWARDED_FOR');
} elseif (getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) {
$ip = getenv('REMOTE_ADDR');
} elseif (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) {
$ip = $_SERVER['REMOTE_ADDR'];
}
return preg_match('/[\d\.]{7,15}/', $ip, $matches) ? $matches [0] : '';
}