1、首先下载微信支付官方sdk
2、在WxPay.Data.php添加类
/**
*
* 企业付款到零钱接口调用结果类
*
*/
class WxTransfersResults extends WxPayResults{
/**
* 将xml转为array
* @param WxPayConfigInterface $config
* @param string $xml
* @return WxPayNotifyResults
* @throws WxPayException
*/
public static function Init($config, $xml)
{
$obj = new self();
$obj->FromXml($xml);
//失败则直接返回失败
if($obj->values['return_code'] != 'SUCCESS') {
foreach ($obj->values as $key => $value) {
#除了return_code和return_msg之外其他的参数存在,则报错
if($key != "return_code" && $key != "return_msg"){
return false;
}
}
return $obj->GetValues();
}
return $obj->GetValues();
}
}
/**
*
* 企业付款到零钱查询输入对象
*
*/
class WxPayTransfers extends WxPayDataBaseSignMd5
{
/**
* 设置微信分配的公众账号ID
* @param string $value
**/
public function SetMch_appid($value)
{
$this->values['mch_appid'] = $value;
}
/**
* 获取微信分配的公众账号ID的值
* @return 值
**/
public function GetMch_appid()
{
return $this->values['mch_appid'];
}
/**
* 判断微信分配的公众账号ID是否存在
* @return true 或 false
**/
public function IsMch_appidSet()
{
return array_key_exists('mch_appid', $this->values);
}
/**
* 设置微信支付分配的商户号
* @param string $value
**/
public function SetMchid($value)
{
$this->values['mchid'] = $value;
}
/**
* 获取微信支付分配的商户号的值
* @return 值
**/
public function GetMchid()
{
return $this->values['mchid'];
}
/**
* 判断微信支付分配的商户号是否存在
* @return true 或 false
**/
public function IsMchidSet()
{
return array_key_exists('mchid', $this->values);
}
/**
* 设置终端设备号(商户自定义,如门店编号)
* @param string $value
**/
public function SetDevice_info($value)
{
$this->values['device_info'] = $value;
}
/**
* 获取终端设备号(商户自定义,如门店编号)的值
* @return 值
**/
public function GetDevice_info()
{
return $this->values['device_info'];
}
/**
* 判断终端设备号(商户自定义,如门店编号)是否存在
* @return true 或 false
**/
public function IsDevice_infoSet()
{
return array_key_exists('device_info', $this->values);
}
/**
* 设置随机字符串,不长于32位。推荐随机数生成算法
* @param string $value
**/
public function SetNonce_str($value)
{
$this->values['nonce_str'] = $value;
}
/**
* 获取随机字符串,不长于32位。推荐随机数生成算法的值
* @return 值
**/
public function GetNonce_str()
{
return $this->values['nonce_str'];
}
/**
* 判断随机字符串,不长于32位。推荐随机数生成算法是否存在
* @return true 或 false
**/
public function IsNonce_strSet()
{
return array_key_exists('nonce_str', $this->values);
}
/**
* 设置商户系统内部的订单号,32个字符内、可包含字母, 其他说明见商户订单号
* @param string $value
**/
public function SetPartner_trade_no($value)
{
$this->values['partner_trade_no'] = $value;
}
/**
* 获取商户系统内部的订单号,32个字符内、可包含字母, 其他说明见商户订单号的值
* @return 值
**/
public function GetPartner_trade_no()
{
return $this->values['partner_trade_no'];
}
/**
* 判断商户系统内部的订单号,32个字符内、可包含字母, 其他说明见商户订单号是否存在
* @return true 或 false
**/
public function IsPartner_trade_noSet()
{
return array_key_exists('partner_trade_no', $this->values);
}
/**
* 设置用户在商户appid下的唯一标识。下单前需要调用【网页授权获取用户信息】接口获取到用户的Openid。
* @param string $value
**/
public function SetOpenid($value)
{
$this->values['openid'] = $value;
}
/**
* 获取用户在商户appid下的唯一标识。下单前需要调用【网页授权获取用户信息】接口获取到用户的Openid。 的值
* @return 值
**/
public function GetOpenid()
{
return $this->values['openid'];
}
/**
* 判断用户在商户appid下的唯一标识。下单前需要调用【网页授权获取用户信息】接口获取到用户的Openid。 是否存在
* @return true 或 false
**/
public function IsOpenidSet()
{
return array_key_exists('openid', $this->values);
}
/**
* 设置取值如下:NO_CHECK,FORCE_CHECK,详细说明见参数规定
* @param string $value
**/
public function SetCheck_name($value)
{
$this->values['check_name'] = $value;
}
/**
* 获取取值如下:NO_CHECK,FORCE_CHECK,详细说明见参数规定
* @return 值
**/
public function GetCheck_name()
{
return $this->values['check_name'];
}
/**
* 判断取值如下:NO_CHECK,FORCE_CHECK,详细说明见参数规定
* @return true 或 false
**/
public function IsCheck_nameSet()
{
return array_key_exists('check_name', $this->values);
}
/**
* 设置check_name=FORCE_CHECK,此参数必传,收款用户真实姓名。
* @param string $value
**/
public function SetRe_user_name($value)
{
$this->values['re_user_name'] = $value;
}
/**
* 获取check_name=FORCE_CHECK,此参数必传,收款用户真实姓名的值
* @return 值
**/
public function GetRe_user_name()
{
return $this->values['re_user_name'];
}
/**
* 判断check_name=FORCE_CHECK,此参数必传,收款用户真实姓名是否存在
* @return true 或 false
**/
public function IsRe_user_nameSet()
{
return array_key_exists('re_user_name', $this->values);
}
/**
* 设置企业付款金额,单位为分,只能为整数,详见企业付款金额
* @param string $value
**/
public function SetAmount($value)
{
$this->values['amount'] = $value;
}
/**
* 获取企业付款金额,单位为分,只能为整数,详见企业付款金额
* @return 值
**/
public function GetAmount()
{
return $this->values['amount'];
}
/**
* 判断企业付款金额,单位为分,只能为整数,详见企业付款金额是否存在
* @return true 或 false
**/
public function IsAmountSet()
{
return array_key_exists('amount', $this->values);
}
/**
* 设置企业付款备注,详见企业付款备注
* @param string $value
**/
public function SetDesc($value)
{
$this->values['desc'] = $value;
}
/**
* 获取企业付款备注,详见企业付款备注
* @return 值
**/
public function GetDesc()
{
return $this->values['desc'];
}
/**
* 判断企业付款备注,详见企业付款备注是否存在
* @return true 或 false
**/
public function IsDescSet()
{
return array_key_exists('desc', $this->values);
}
/**
* 设置调用微信支付API的机器IP
* @param string $value
**/
public function SetSpbill_create_ip($value)
{
$this->values['spbill_create_ip'] = $value;
}
/**
* 获取调用微信支付API的机器IP 的值
* @return 值
**/
public function GetSpbill_create_ip()
{
return $this->values['spbill_create_ip'];
}
/**
* 判断调用微信支付API的机器IP 是否存在
* @return true 或 false
**/
public function IsSpbill_create_ipSet()
{
return array_key_exists('spbill_create_ip', $this->values);
}
}
3、在WxPay.Api.php中添加方法
/**
*
* 企业付款到零钱,WxPayTransfers中partner_trade_no、openid、amount、desc、check_name必填
* mch_appid、mchid、spbill_create_ip、nonce_str不需要填入
* @param WxPayConfigInterface $config 配置对象
* @param WxPayTransfers $inputObj
* @param int $timeOut
* @throws WxPayException
* @return 成功时返回,其他抛异常
*/
public static function transfers($config, $inputObj, $timeOut = 6)
{
$url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers";
//检测必填参数
if(!$inputObj->IsPartner_trade_noSet()) {
throw new WxPayException("缺少企业付款到零钱接口必填参数partner_trade_no!");
}else if(!$inputObj->IsOpenidSet()){
throw new WxPayException("缺少企业付款到零钱接口必填参数openid!");
}else if(!$inputObj->IsAmountSet()) {
throw new WxPayException("缺少企业付款到零钱接口必填参数amount!");
}else if(!$inputObj->IsDescSet()) {
throw new WxPayException("缺少企业付款到零钱接口必填参数desc!");
}
//关联参数
if($inputObj->GetCheck_name() == "FORCE_CHECK" && !$inputObj->IsRe_user_nameSet()){
throw new WxPayException("企业付款到零钱接口中,缺少必填参数re_user_name!check_name为FORCE_CHECK时,re_user_name为必填参数!");
}
$inputObj->SetMch_appid($config->GetAppId());//公众账号ID
$inputObj->SetMchid($config->GetMerchantId());//商户号
$inputObj->SetSpbill_create_ip($_SERVER['REMOTE_ADDR']);//终端ip
$inputObj->SetNonce_str(self::getNonceStr());//随机字符串
//签名
$inputObj->SetSign($config);
$xml = $inputObj->ToXml();
$startTimeStamp = self::getMillisecond();//请求开始时间
$response = self::postXmlCurl($config, $xml, $url, true, $timeOut);
$result = WxTransfersResults::Init($config, $response);
self::reportCostTime($config, $url, $startTimeStamp, $result);//上报请求花费时间
return $result;
}
4、调用
require_once "../lib/WxPay.Api.php";
require_once "WxPay.Config.php";
$input = new WxPayTransfers();
$input->SetPartner_trade_no("sdkphp123456789".date("YmdHis"));
$input->SetOpenid("123456789");
$input->SetAmount(1);
$input->SetDesc("test");
$input->SetCheck_name("FORCE_CHECK"); // NO_CHECK:不校验真实姓名,FORCE_CHECK:强校验真实姓名
$input->SetRe_user_name("test"); // 真实姓名,check_name为FORCE_CHECK必填
$config = new WxPayConfig();
$result = WxPayApi::transfers($config, $input);
print_r("");
print_r($result);
print_r("
");