MakeSign($key); $this->values['sign'] = $sign; return $sign; } /** * 获取签名,详见签名生成算法的值 * @return 值 **/ public function GetSign() { return $this->values['sign']; } /** * 判断签名,详见签名生成算法是否存在 * @return true 或 false **/ public function IsSignSet() { return array_key_exists('sign', $this->values); } /** * 输出xml字符 * @throws WxPayException **/ public function ToXml() { if(!is_array($this->values) || count($this->values) <= 0) { throw new WxPayException("数组数据异常!"); } $xml = ""; foreach ($this->values as $key=>$val) { if (is_numeric($val)){ $xml.="<".$key.">".$val.""; } else { $xml.="<".$key.">"; } } $xml.= ""; return $xml; } /** * 将xml转为array * @param string $xml * @throws WxPayException */ public function FromXml($xml) { if(!$xml){ throw new WxPayException("xml数据异常!"); } //将XML转为array //禁止引用外部xml实体 libxml_disable_entity_loader(true); $this->values = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true); return $this->values; } /** * 格式化参数格式化成url参数 */ public function ToUrlParams($params = []) { $buff = ""; if (empty($params)) { $values = $this->values; } else { $values = $params; } foreach ($values as $k => $v) { if($k != "sign" && $v != "" && !is_array($v)){ $buff .= $k . "=" . $v . "&"; } } $buff = trim($buff, "&"); return $buff; } /** * 生成签名 * @return 签名,本函数不覆盖sign成员变量,如要设置签名需要调用SetSign方法赋值 */ public function MakeSign($key = '', $params = []) { if (!empty($params)) { $this->values = $params; } //签名步骤一:按字典序排序参数 ksort($this->values); $string = $this->ToUrlParams(); //签名步骤二:在string后加入KEY $string = $string . "&key=".$key; //签名步骤三:MD5加密 $string = md5($string); //签名步骤四:所有字符转为大写 $result = strtoupper($string); return $result; } /** * 获取设置的值 */ public function GetValues() { return $this->values; } } /** * * 订单查询输入对象 * @author widyhu * */ class WxPayOrderQuery extends WxPayDataBase { /** * 设置微信分配的公众账号ID * @param string $value **/ public function SetAppid($value) { $this->values['appid'] = $value; } /** * 获取微信分配的公众账号ID的值 * @return 值 **/ public function GetAppid() { return $this->values['appid']; } /** * 判断微信分配的公众账号ID是否存在 * @return true 或 false **/ public function IsAppidSet() { return array_key_exists('appid', $this->values); } /** * 设置微信支付分配的商户号 * @param string $value **/ public function SetMch_id($value) { $this->values['mch_id'] = $value; } /** * 获取微信支付分配的商户号的值 * @return 值 **/ public function GetMch_id() { return $this->values['mch_id']; } /** * 判断微信支付分配的商户号是否存在 * @return true 或 false **/ public function IsMch_idSet() { return array_key_exists('mch_id', $this->values); } /** * 设置微信的订单号,优先使用 * @param string $value **/ public function SetTransaction_id($value) { $this->values['transaction_id'] = $value; } /** * 获取微信的订单号,优先使用的值 * @return 值 **/ public function GetTransaction_id() { return $this->values['transaction_id']; } /** * 判断微信的订单号,优先使用是否存在 * @return true 或 false **/ public function IsTransaction_idSet() { return array_key_exists('transaction_id', $this->values); } /** * 设置商户系统内部的订单号,当没提供transaction_id时需要传这个。 * @param string $value **/ public function SetOut_trade_no($value) { $this->values['out_trade_no'] = $value; } /** * 获取商户系统内部的订单号,当没提供transaction_id时需要传这个。的值 * @return 值 **/ public function GetOut_trade_no() { return $this->values['out_trade_no']; } /** * 判断商户系统内部的订单号,当没提供transaction_id时需要传这个。是否存在 * @return true 或 false **/ public function IsOut_trade_noSet() { return array_key_exists('out_trade_no', $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); } } /** * * 接口调用结果类 * @author widyhu * */ class WxPayResults extends WxPayDataBase { /** * * 检测签名 */ public function CheckSign() { //fix异常 if(!$this->IsSignSet()){ throw new WxPayException("签名错误1"); } $sign = $this->MakeSign(); if($this->GetSign() == $sign){ return true; } throw new WxPayException("签名错误2"); } /** * * 使用数组初始化 * @param array $array */ public function FromArray($array) { $this->values = $array; } /** * * 使用数组初始化对象 * @param array $array * @param 是否检测签名 $noCheckSign */ public static function InitFromArray($array, $noCheckSign = false) { $obj = new self(); $obj->FromArray($array); if($noCheckSign == false){ } return $obj; } /** * * 设置参数 * @param string $key * @param string $value */ public function SetData($key, $value) { $this->values[$key] = $value; } /** * 将xml转为array * @param string $xml * @throws WxPayException */ public static function Init($xml) { $obj = new self(); $obj->FromXml($xml); //fix bug 2015-06-29 if($obj->values['return_code'] != 'SUCCESS'){ return $obj->GetValues(); } return $obj->GetValues(); } } /** * * 回调基础类 * @author widyhu * */ class WxPayNotifyReply extends WxPayDataBase { /** * * 设置错误码 FAIL 或者 SUCCESS * @param string */ public function SetReturn_code($return_code) { $this->values['return_code'] = $return_code; } /** * * 获取错误码 FAIL 或者 SUCCESS * @return string $return_code */ public function GetReturn_code() { return $this->values['return_code']; } /** * * 设置错误信息 * @param string $return_code */ public function SetReturn_msg($return_msg) { $this->values['return_msg'] = $return_msg; } /** * * 获取错误信息 * @return string */ public function GetReturn_msg() { return $this->values['return_msg']; } /** * * 设置返回参数 * @param string $key * @param string $value */ public function SetData($key, $value) { $this->values[$key] = $value; } } /** * * 提交退款输入对象 * @author widyhu * */ class WxPayRefund extends WxPayDataBase { /** * 设置微信分配的公众账号ID * @param string $value **/ public function SetAppid($value) { $this->values['appid'] = $value; } /** * 获取微信分配的公众账号ID的值 * @return 值 **/ public function GetAppid() { return $this->values['appid']; } /** * 判断微信分配的公众账号ID是否存在 * @return true 或 false **/ public function IsAppidSet() { return array_key_exists('appid', $this->values); } /** * 设置微信分配的公众账号ID * @param string $value **/ public function SetSub_Appid($value) { $this->values['sub_appid'] = $value; } /** * 获取微信分配的公众账号ID的值 * @return 值 **/ public function GetSub_Appid() { return $this->values['sub_appid']; } /** * 判断微信分配的公众账号ID是否存在 * @return true 或 false **/ public function IsSub_AppidSet() { return array_key_exists('sub_appid', $this->values); } /** * 设置微信分配的公众账号ID * @param string $value **/ public function SetSub_Mch_id($value) { $this->values['sub_mch_id'] = $value; } /** * 获取微信分配的公众账号ID的值 * @return 值 **/ public function GetSub_Mch_id() { return $this->values['sub_mch_id']; } /** * 判断微信分配的公众账号ID是否存在 * @return true 或 false **/ public function IsSub_Mch_idSet() { return array_key_exists('sub_mch_id', $this->values); } /** * 设置微信支付分配的商户号 * @param string $value **/ public function SetMch_id($value) { $this->values['mch_id'] = $value; } /** * 获取微信支付分配的商户号的值 * @return 值 **/ public function GetMch_id() { return $this->values['mch_id']; } /** * 判断微信支付分配的商户号是否存在 * @return true 或 false **/ public function IsMch_idSet() { return array_key_exists('mch_id', $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); } /** * 设置微信订单号 * @param string $value **/ public function SetTransaction_id($value) { $this->values['transaction_id'] = $value; } /** * 获取微信订单号的值 * @return 值 **/ public function GetTransaction_id() { return $this->values['transaction_id']; } /** * 判断微信订单号是否存在 * @return true 或 false **/ public function IsTransaction_idSet() { return array_key_exists('transaction_id', $this->values); } /** * 设置商户系统内部的订单号,transaction_id、out_trade_no二选一,如果同时存在优先级:transaction_id> out_trade_no * @param string $value **/ public function SetOut_trade_no($value) { $this->values['out_trade_no'] = $value; } /** * 获取商户系统内部的订单号,transaction_id、out_trade_no二选一,如果同时存在优先级:transaction_id> out_trade_no的值 * @return 值 **/ public function GetOut_trade_no() { return $this->values['out_trade_no']; } /** * 判断商户系统内部的订单号,transaction_id、out_trade_no二选一,如果同时存在优先级:transaction_id> out_trade_no是否存在 * @return true 或 false **/ public function IsOut_trade_noSet() { return array_key_exists('out_trade_no', $this->values); } /** * 设置商户系统内部的退款单号,商户系统内部唯一,同一退款单号多次请求只退一笔 * @param string $value **/ public function SetOut_refund_no($value) { $this->values['out_refund_no'] = $value; } /** * 获取商户系统内部的退款单号,商户系统内部唯一,同一退款单号多次请求只退一笔的值 * @return 值 **/ public function GetOut_refund_no() { return $this->values['out_refund_no']; } /** * 判断商户系统内部的退款单号,商户系统内部唯一,同一退款单号多次请求只退一笔是否存在 * @return true 或 false **/ public function IsOut_refund_noSet() { return array_key_exists('out_refund_no', $this->values); } /** * 设置订单总金额,单位为分,只能为整数,详见支付金额 * @param string $value **/ public function SetTotal_fee($value) { $this->values['total_fee'] = $value; } /** * 获取订单总金额,单位为分,只能为整数,详见支付金额的值 * @return 值 **/ public function GetTotal_fee() { return $this->values['total_fee']; } /** * 判断订单总金额,单位为分,只能为整数,详见支付金额是否存在 * @return true 或 false **/ public function IsTotal_feeSet() { return array_key_exists('total_fee', $this->values); } /** * 设置退款总金额,订单总金额,单位为分,只能为整数,详见支付金额 * @param string $value **/ public function SetRefund_fee($value) { $this->values['refund_fee'] = $value; } /** * 获取退款总金额,订单总金额,单位为分,只能为整数,详见支付金额的值 * @return 值 **/ public function GetRefund_fee() { return $this->values['refund_fee']; } /** * 判断退款总金额,订单总金额,单位为分,只能为整数,详见支付金额是否存在 * @return true 或 false **/ public function IsRefund_feeSet() { return array_key_exists('refund_fee', $this->values); } /** * 设置货币类型,符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型 * @param string $value **/ public function SetRefund_fee_type($value) { $this->values['refund_fee_type'] = $value; } /** * 获取货币类型,符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型的值 * @return 值 **/ public function GetRefund_fee_type() { return $this->values['refund_fee_type']; } /** * 判断货币类型,符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型是否存在 * @return true 或 false **/ public function IsRefund_fee_typeSet() { return array_key_exists('refund_fee_type', $this->values); } /** * 设置操作员帐号, 默认为商户号 * @param string $value **/ public function SetOp_user_id($value) { $this->values['op_user_id'] = $value; } /** * 获取操作员帐号, 默认为商户号的值 * @return 值 **/ public function GetOp_user_id() { return $this->values['op_user_id']; } /** * 判断操作员帐号, 默认为商户号是否存在 * @return true 或 false **/ public function IsOp_user_idSet() { return array_key_exists('op_user_id', $this->values); } } /** * * 提交退款输入对象 * @author widyhu * */ class WxPayTransfer extends WxPayDataBase { /** * 设置商户号APPID * @param string $value **/ public function SetMchAppId($value) { $this->values['mch_appid'] = $value; } /** * 获取微信分配的公众账号ID的值 * @return 值 **/ public function GetMchAppId() { return $this->values['mch_appid']; } public function IsMchAppIdSet() { return array_key_exists('mch_appid', $this->values); } /** * 设置商户号ID * @param string $value **/ public function SetMchId($value) { $this->values['mchid'] = $value; } /** * 获取商户号ID * @return 值 **/ public function GetMchId() { return $this->values['mchid']; } /** * 判断微信支付分配的商户号是否存在 * @return true 或 false **/ public function IsMchIdSet() { return array_key_exists('mchid', $this->values); } /** * 设置随机字符串,不长于32位。推荐随机数生成算法 * @param string $value **/ public function SetNonceStr($value) { $this->values['nonce_str'] = $value; } /** * 获取随机字符串,不长于32位。推荐随机数生成算法的值 * @return 值 **/ public function GetNonceStr() { return $this->values['nonce_str']; } /** * 判断随机字符串,不长于32位。推荐随机数生成算法是否存在 * @return true 或 false **/ public function IsNonceStrSet() { return array_key_exists('nonce_str', $this->values); } /** * 设置商户系统内部的订单号,partner_trade_no二选一 * @param string $value **/ public function SetPartnerTradeNo($value) { $this->values['partner_trade_no'] = $value; } /** * 获取商户系统内部的订单号,partner_trade_no, * @return 值 **/ public function GetPartnerTradeNo() { return $this->values['partner_trade_no']; } /** * 判断商户系统内部的订单号,partner_trade_no二选一 * @return true 或 false **/ public function IsPartnerTradeNoSet() { return array_key_exists('partner_trade_no', $this->values); } /** * checkName * @param string $value **/ public function SetCheckName($value) { $this->values['check_name'] = $value; } // 描述 public function SetDesc($value) { $this->values['desc'] = $value; } /** * IP地址 * @param string $value **/ public function SetSpbilCreateIp($value) { $this->values['spbill_create_ip'] = $value; } /** * IP地址 * @return 值 **/ public function GetSpbilCreateIp() { return $this->values['spbill_create_ip']; } /** * IP地址 * @return true 或 false **/ public function IsSpbilCreateIpSet() { return array_key_exists('spbill_create_ip', $this->values); } /** * OpenId * @param string $value **/ public function SetOpenId($value) { $this->values['openid'] = $value; } /** * openid * @return 值 **/ public function GetOpenId() { return $this->values['openid']; } /** * IsOpenIdSet * @return true 或 false **/ public function IsOpenIdSet() { return array_key_exists('openid', $this->values); } /** * 收款用户姓名 * @param string $value **/ public function SetReUserName($value) { $this->values['re_user_name'] = $value; } /** * 获取收款用户姓名 * @return 值 **/ public function GetReUserName() { return $this->values['re_user_name']; } /** * 是否设置收款用户姓名 * @return true 或 false **/ public function IsReUserNameSet() { 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); } }