PHP开发微信支付企业付款到零钱

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("<pre>");
print_r($result);
print_r("</pre>");

猜你喜欢

转载自blog.csdn.net/u013636118/article/details/89962799