Completed
Push — master ( 9bc9b6...ec4bbc )
by Wei
04:31
created
src/service/Mchpay.php 2 patches
Spacing   +22 added lines, -22 removed lines patch added patch discarded remove patch
@@ -25,19 +25,19 @@  discard block
 block discarded – undo
25 25
 	 * @return array
26 26
 	 * @throws Exception
27 27
 	 */
28
-	public function transferWallet($partner_trade_no,$openid,$amount,$desc,$spbill_create_ip = null,$re_user_name = null,$check_name = WechatPay::CHECKNAME_FORCECHECK){
28
+	public function transferWallet($partner_trade_no, $openid, $amount, $desc, $spbill_create_ip = null, $re_user_name = null, $check_name = WechatPay::CHECKNAME_FORCECHECK) {
29 29
 		$data = array();
30
-		if($check_name == WechatPay::CHECKNAME_FORCECHECK && !$re_user_name) throw new Exception('Real name is required');
30
+		if ($check_name == WechatPay::CHECKNAME_FORCECHECK && !$re_user_name) throw new Exception('Real name is required');
31 31
 		$data["mch_appid"] = $this->config["app_id"];
32 32
 		$data["mchid"] = $this->config["mch_id"];
33 33
 		$data["partner_trade_no"] = $partner_trade_no;
34 34
 		$data["openid"] = $openid;
35 35
 		$data["amount"] = $amount;
36 36
 		$data["desc"] = $desc;
37
-		$data['spbill_create_ip'] = $spbill_create_ip?:$_SERVER['SERVER_ADDR'];
37
+		$data['spbill_create_ip'] = $spbill_create_ip ?: $_SERVER['SERVER_ADDR'];
38 38
 		$data["check_name"] = $check_name;
39 39
 		$data["re_user_name"] = $re_user_name;
40
-		$result = $this->post(self::URL_TRANSFER_WALLET,$data,true);
40
+		$result = $this->post(self::URL_TRANSFER_WALLET, $data, true);
41 41
 		return $result;
42 42
 	}
43 43
 
@@ -47,12 +47,12 @@  discard block
 block discarded – undo
47 47
 	 * @param $partner_trade_no
48 48
 	 * @return array
49 49
 	 */
50
-	public function queryTransferWallet($partner_trade_no){
50
+	public function queryTransferWallet($partner_trade_no) {
51 51
 		$data = array();
52 52
 		$data["appid"] = $this->config["app_id"];
53 53
 		$data["mch_id"] = $this->config["mch_id"];
54 54
 		$data["partner_trade_no"] = $partner_trade_no;
55
-		$result = $this->post(self::URL_QUERY_TRANSFER_WALLET,$data,true);
55
+		$result = $this->post(self::URL_QUERY_TRANSFER_WALLET, $data, true);
56 56
 		return $result;
57 57
 	}
58 58
 
@@ -68,8 +68,8 @@  discard block
 block discarded – undo
68 68
 	 * @return array
69 69
 	 * @throws Exception
70 70
 	 */
71
-	public function transferBankCard($partner_trade_no,$bank_no,$true_name,$bank_code,$amount,$desc){
72
-		if(!in_array($bank_code,array_values(self::$BANKCODE))) throw new Exception("Unsupported bank code: $bank_code");
71
+	public function transferBankCard($partner_trade_no, $bank_no, $true_name, $bank_code, $amount, $desc) {
72
+		if (!in_array($bank_code, array_values(self::$BANKCODE))) throw new Exception("Unsupported bank code: $bank_code");
73 73
 		$data = array();
74 74
 		$data["partner_trade_no"] = $partner_trade_no;
75 75
 		$enc_bank_no = $this->rsaEncrypt($bank_no);
@@ -79,15 +79,15 @@  discard block
 block discarded – undo
79 79
 		$data["bank_code"] = $bank_code;
80 80
 		$data["desc"] = $desc;
81 81
 		$data["amount"] = $amount;
82
-		$result = $this->post(self::URL_TRANSFER_BANKCARD,$data,true);
82
+		$result = $this->post(self::URL_TRANSFER_BANKCARD, $data, true);
83 83
 		return $result;
84 84
 	}
85 85
 
86
-	public function rsaEncrypt($data,$pubkey = null){
87
-		if(!$pubkey) $pubkey = $this->getPublicKey();
86
+	public function rsaEncrypt($data, $pubkey = null) {
87
+		if (!$pubkey) $pubkey = $this->getPublicKey();
88 88
 		$encrypted = null;
89 89
 		$pubkey = openssl_get_publickey($pubkey);
90
-		if (@openssl_public_encrypt($data, $encrypted, $pubkey,OPENSSL_PKCS1_OAEP_PADDING))
90
+		if (@openssl_public_encrypt($data, $encrypted, $pubkey, OPENSSL_PKCS1_OAEP_PADDING))
91 91
 			$data = base64_encode($encrypted);
92 92
 		else
93 93
 			throw new Exception('Unable to encrypt data');
@@ -100,12 +100,12 @@  discard block
 block discarded – undo
100 100
 	 * @param $partner_trade_no
101 101
 	 * @return array
102 102
 	 */
103
-	public function queryTransferBankCard($partner_trade_no){
103
+	public function queryTransferBankCard($partner_trade_no) {
104 104
 		$data = array();
105 105
 		$data["appid"] = $this->config["app_id"];
106 106
 		$data["mch_id"] = $this->config["mch_id"];
107 107
 		$data["partner_trade_no"] = $partner_trade_no;
108
-		$result = $this->post(self::URL_QUERY_TRANSFER_WALLET,$data,true);
108
+		$result = $this->post(self::URL_QUERY_TRANSFER_WALLET, $data, true);
109 109
 		return $result;
110 110
 	}
111 111
 
@@ -116,18 +116,18 @@  discard block
 block discarded – undo
116 116
 	 * @return string
117 117
 	 * @throws Exception
118 118
 	 */
119
-	public function getPublicKey($refresh = false){
120
-		if(!$this->publicKey) {
119
+	public function getPublicKey($refresh = false) {
120
+		if (!$this->publicKey) {
121 121
 			if (!$refresh && file_exists($this->config["rsa_pubkey_path"])) {
122 122
 				$this->publicKey = file_get_contents($this->config["rsa_pubkey_path"]);
123
-			}else{
123
+			}else {
124 124
 				$data = array();
125 125
 				$data["mch_id"] = $this->config["mch_id"];
126 126
 				$data["sign_type"] = $this->config["sign_type"];
127 127
 				$result = $this->post(self::URL_GETPUBLICKEY, $data, true);
128 128
 				$pubkey = $result['pub_key'];
129 129
 				$this->publicKey = $this->convertPKCS1toPKCS8($pubkey);
130
-				if($fp = @fopen($this->config["rsa_pubkey_path"], "w")) {
130
+				if ($fp = @fopen($this->config["rsa_pubkey_path"], "w")) {
131 131
 					fwrite($fp, $this->publicKey);
132 132
 					fclose($fp);
133 133
 				}
@@ -136,16 +136,16 @@  discard block
 block discarded – undo
136 136
 		return $this->publicKey;
137 137
 	}
138 138
 
139
-	public function setPublicKey($publicKey){
139
+	public function setPublicKey($publicKey) {
140 140
 		$this->publicKey = $publicKey;
141 141
 	}
142 142
 
143
-	private function convertPKCS1toPKCS8($pkcs1){
143
+	private function convertPKCS1toPKCS8($pkcs1) {
144 144
 		$start_key = $pkcs1;
145 145
 		$start_key = str_replace('-----BEGIN RSA PUBLIC KEY-----', '', $start_key);
146 146
 		$start_key = trim(str_replace('-----END RSA PUBLIC KEY-----', '', $start_key));
147
-		$key = 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A' . str_replace("\n", '', $start_key);
148
-		$key = "-----BEGIN PUBLIC KEY-----\n" . wordwrap($key, 64, "\n", true) . "\n-----END PUBLIC KEY-----";
147
+		$key = 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A'.str_replace("\n", '', $start_key);
148
+		$key = "-----BEGIN PUBLIC KEY-----\n".wordwrap($key, 64, "\n", true)."\n-----END PUBLIC KEY-----";
149 149
 		return $key;
150 150
 	}
151 151
 }
152 152
\ No newline at end of file
Please login to merge, or discard this patch.
Braces   +15 added lines, -8 removed lines patch added patch discarded remove patch
@@ -27,7 +27,9 @@  discard block
 block discarded – undo
27 27
 	 */
28 28
 	public function transferWallet($partner_trade_no,$openid,$amount,$desc,$spbill_create_ip = null,$re_user_name = null,$check_name = WechatPay::CHECKNAME_FORCECHECK){
29 29
 		$data = array();
30
-		if($check_name == WechatPay::CHECKNAME_FORCECHECK && !$re_user_name) throw new Exception('Real name is required');
30
+		if($check_name == WechatPay::CHECKNAME_FORCECHECK && !$re_user_name) {
31
+			throw new Exception('Real name is required');
32
+		}
31 33
 		$data["mch_appid"] = $this->config["app_id"];
32 34
 		$data["mchid"] = $this->config["mch_id"];
33 35
 		$data["partner_trade_no"] = $partner_trade_no;
@@ -69,7 +71,9 @@  discard block
 block discarded – undo
69 71
 	 * @throws Exception
70 72
 	 */
71 73
 	public function transferBankCard($partner_trade_no,$bank_no,$true_name,$bank_code,$amount,$desc){
72
-		if(!in_array($bank_code,array_values(self::$BANKCODE))) throw new Exception("Unsupported bank code: $bank_code");
74
+		if(!in_array($bank_code,array_values(self::$BANKCODE))) {
75
+			throw new Exception("Unsupported bank code: $bank_code");
76
+		}
73 77
 		$data = array();
74 78
 		$data["partner_trade_no"] = $partner_trade_no;
75 79
 		$enc_bank_no = $this->rsaEncrypt($bank_no);
@@ -84,13 +88,16 @@  discard block
 block discarded – undo
84 88
 	}
85 89
 
86 90
 	public function rsaEncrypt($data,$pubkey = null){
87
-		if(!$pubkey) $pubkey = $this->getPublicKey();
91
+		if(!$pubkey) {
92
+			$pubkey = $this->getPublicKey();
93
+		}
88 94
 		$encrypted = null;
89 95
 		$pubkey = openssl_get_publickey($pubkey);
90
-		if (@openssl_public_encrypt($data, $encrypted, $pubkey,OPENSSL_PKCS1_OAEP_PADDING))
91
-			$data = base64_encode($encrypted);
92
-		else
93
-			throw new Exception('Unable to encrypt data');
96
+		if (@openssl_public_encrypt($data, $encrypted, $pubkey,OPENSSL_PKCS1_OAEP_PADDING)) {
97
+					$data = base64_encode($encrypted);
98
+		} else {
99
+					throw new Exception('Unable to encrypt data');
100
+		}
94 101
 		return $data;
95 102
 	}
96 103
 
@@ -120,7 +127,7 @@  discard block
 block discarded – undo
120 127
 		if(!$this->publicKey) {
121 128
 			if (!$refresh && file_exists($this->config["rsa_pubkey_path"])) {
122 129
 				$this->publicKey = file_get_contents($this->config["rsa_pubkey_path"]);
123
-			}else{
130
+			} else{
124 131
 				$data = array();
125 132
 				$data["mch_id"] = $this->config["mch_id"];
126 133
 				$data["sign_type"] = $this->config["sign_type"];
Please login to merge, or discard this patch.
src/WechatPay.php 2 patches
Spacing   +101 added lines, -101 removed lines patch added patch discarded remove patch
@@ -30,10 +30,10 @@  discard block
 block discarded – undo
30 30
  * @method static service\Coupon    Coupon(array $config)
31 31
  */
32 32
 class WechatPay {
33
-	const TRADETYPE_JSAPI = 'JSAPI',TRADETYPE_NATIVE = 'NATIVE',TRADETYPE_APP = 'APP',TRADETYPE_MWEB = 'MWEB';
33
+	const TRADETYPE_JSAPI = 'JSAPI', TRADETYPE_NATIVE = 'NATIVE', TRADETYPE_APP = 'APP', TRADETYPE_MWEB = 'MWEB';
34 34
 	const SIGNTYPE_MD5 = 'MD5', SIGNTYPE_HMACSHA256 = 'HMAC-SHA256';
35
-	const CHECKNAME_FORCECHECK = 'FORCE_CHECK',CHECKNAME_NOCHECK = 'NO_CHECK';
36
-	const ACCOUNTTYPE_BASIC = 'Basic',ACCOUNTTYPE_OPERATION = 'Operation',ACCOUNTTYPE_FEES = 'Fees';
35
+	const CHECKNAME_FORCECHECK = 'FORCE_CHECK', CHECKNAME_NOCHECK = 'NO_CHECK';
36
+	const ACCOUNTTYPE_BASIC = 'Basic', ACCOUNTTYPE_OPERATION = 'Operation', ACCOUNTTYPE_FEES = 'Fees';
37 37
 	const API_ENDPOINT = 'https://api.mch.weixin.qq.com/';
38 38
 	/** 支付 */
39 39
 	const URL_UNIFIEDORDER = 'pay/unifiedorder';
@@ -118,7 +118,7 @@  discard block
 block discarded – undo
118 118
 	 * @return mixed
119 119
 	 */
120 120
 	private static function load($name, $config) {
121
-		$service = __NAMESPACE__ . "\\service\\{$name}";
121
+		$service = __NAMESPACE__."\\service\\{$name}";
122 122
 		return new $service($config);
123 123
 	}
124 124
 
@@ -132,34 +132,34 @@  discard block
 block discarded – undo
132 132
 		return self::load($name, $config);
133 133
 	}
134 134
 
135
-	public function setWechatOAuth($wechatOAuth){
135
+	public function setWechatOAuth($wechatOAuth) {
136 136
 		$this->wechatOAuth = $wechatOAuth;
137 137
 	}
138 138
 
139
-	public function getWechatOAuth(){
140
-		if(!$this->wechatOAuth){
141
-			$this->wechatOAuth = new WechatOAuth($this->config['app_id'],$this->config['app_secret']);
139
+	public function getWechatOAuth() {
140
+		if (!$this->wechatOAuth) {
141
+			$this->wechatOAuth = new WechatOAuth($this->config['app_id'], $this->config['app_secret']);
142 142
 		}
143 143
 		return $this->wechatOAuth;
144 144
 	}
145 145
 
146
-	public function setConfig($config){
146
+	public function setConfig($config) {
147 147
 		$this->config = $config;
148 148
 	}
149 149
 
150
-	public function getConfig(){
150
+	public function getConfig() {
151 151
 		return $this->config;
152 152
 	}
153 153
 
154
-	public function setHttpClient($httpClient){
154
+	public function setHttpClient($httpClient) {
155 155
 		$this->httpClient = $httpClient;
156 156
 	}
157 157
 
158
-	public function setCacheProvider($cacheProvider){
158
+	public function setCacheProvider($cacheProvider) {
159 159
 		$this->cacheProvider = $cacheProvider;
160 160
 	}
161 161
 
162
-	public function getCacheProvider(){
162
+	public function getCacheProvider() {
163 163
 		return $this->cacheProvider;
164 164
 	}
165 165
 
@@ -173,25 +173,25 @@  discard block
 block discarded – undo
173 173
 	public function unifiedOrder($params) {
174 174
 		$data = array();
175 175
 		$data["appid"] = $this->config["app_id"];
176
-		$data["device_info"] = (isset($params['device_info'])&&trim($params['device_info'])!='')?$params['device_info']:null;
176
+		$data["device_info"] = (isset($params['device_info']) && trim($params['device_info']) != '') ? $params['device_info'] : null;
177 177
 		$data["body"] = $params['body'];
178
-		$data["detail"] = isset($params['detail'])?$params['detail']:null;//optional
179
-		$data["attach"] = isset($params['attach'])?$params['attach']:null;//optional
180
-		$data["out_trade_no"] = isset($params['out_trade_no'])?$params['out_trade_no']:null;
181
-		$data["fee_type"] = isset($params['fee_type'])?$params['fee_type']:'CNY';
178
+		$data["detail"] = isset($params['detail']) ? $params['detail'] : null; //optional
179
+		$data["attach"] = isset($params['attach']) ? $params['attach'] : null; //optional
180
+		$data["out_trade_no"] = isset($params['out_trade_no']) ? $params['out_trade_no'] : null;
181
+		$data["fee_type"] = isset($params['fee_type']) ? $params['fee_type'] : 'CNY';
182 182
 		$data["total_fee"]    = $params['total_fee'];
183 183
 		$data["spbill_create_ip"] = $params['spbill_create_ip'];
184
-		$data["time_start"] = isset($params['time_start'])?$params['time_start']:null;//optional
185
-		$data["time_expire"] = isset($params['time_expire'])?$params['time_expire']:null;//optional
186
-		$data["goods_tag"] = isset($params['goods_tag'])?$params['goods_tag']:null;
184
+		$data["time_start"] = isset($params['time_start']) ? $params['time_start'] : null; //optional
185
+		$data["time_expire"] = isset($params['time_expire']) ? $params['time_expire'] : null; //optional
186
+		$data["goods_tag"] = isset($params['goods_tag']) ? $params['goods_tag'] : null;
187 187
 		$data["notify_url"] = $this->config["notify_url"];
188 188
 		$data["trade_type"] = $params['trade_type'];
189
-		if($params['trade_type'] == WechatPay::TRADETYPE_NATIVE){
190
-			if(!isset($params['product_id'])) throw new Exception('product_id is required when trade_type is NATIVE');
189
+		if ($params['trade_type'] == WechatPay::TRADETYPE_NATIVE) {
190
+			if (!isset($params['product_id'])) throw new Exception('product_id is required when trade_type is NATIVE');
191 191
 			$data["product_id"] = $params['product_id'];
192 192
 		}
193
-		if($params['trade_type'] == WechatPay::TRADETYPE_JSAPI){
194
-			if(!isset($params['openid'])) throw new Exception('openid is required when trade_type is JSAPI');
193
+		if ($params['trade_type'] == WechatPay::TRADETYPE_JSAPI) {
194
+			if (!isset($params['openid'])) throw new Exception('openid is required when trade_type is JSAPI');
195 195
 			$data["openid"] = $params['openid'];
196 196
 		}
197 197
 		$result = $this->post(self::URL_UNIFIEDORDER, $data);
@@ -204,7 +204,7 @@  discard block
 block discarded – undo
204 204
 	 * @param $transaction_id string 微信订单号
205 205
 	 * @return array
206 206
 	 */
207
-	public function queryOrderByTransactionId($transaction_id){
207
+	public function queryOrderByTransactionId($transaction_id) {
208 208
 		$data = array();
209 209
 		$data["appid"] = $this->config["app_id"];
210 210
 		$data["transaction_id"] = $transaction_id;
@@ -218,7 +218,7 @@  discard block
 block discarded – undo
218 218
 	 * @param $out_trade_no string 商户订单号
219 219
 	 * @return array
220 220
 	 */
221
-	public function queryOrderByOutTradeNo($out_trade_no){
221
+	public function queryOrderByOutTradeNo($out_trade_no) {
222 222
 		$data = array();
223 223
 		$data["appid"] = $this->config["app_id"];
224 224
 		$data["out_trade_no"] = $out_trade_no;
@@ -233,7 +233,7 @@  discard block
 block discarded – undo
233 233
 	 * @param $offset int 偏移
234 234
 	 * @return array
235 235
 	 */
236
-	public function queryRefundByTransactionId($transaction_id,$offset = 0){
236
+	public function queryRefundByTransactionId($transaction_id, $offset = 0) {
237 237
 		$data = array();
238 238
 		$data["appid"] = $this->config["app_id"];
239 239
 		$data["transaction_id"] = $transaction_id;
@@ -249,7 +249,7 @@  discard block
 block discarded – undo
249 249
 	 * @param $offset int 偏移
250 250
 	 * @return array
251 251
 	 */
252
-	public function queryRefundByOutTradeNo($out_trade_no,$offset = 0){
252
+	public function queryRefundByOutTradeNo($out_trade_no, $offset = 0) {
253 253
 		$data = array();
254 254
 		$data["appid"] = $this->config["app_id"];
255 255
 		$data["out_trade_no"] = $out_trade_no;
@@ -265,7 +265,7 @@  discard block
 block discarded – undo
265 265
 	 * @param $offset int 偏移
266 266
 	 * @return array
267 267
 	 */
268
-	public function queryRefundByRefundId($refund_id,$offset = 0){
268
+	public function queryRefundByRefundId($refund_id, $offset = 0) {
269 269
 		$data = array();
270 270
 		$data["appid"] = $this->config["app_id"];
271 271
 		$data["refund_id"] = $refund_id;
@@ -281,7 +281,7 @@  discard block
 block discarded – undo
281 281
 	 * @param $offset int 偏移
282 282
 	 * @return array
283 283
 	 */
284
-	public function queryRefundByOutRefundNo($out_refund_no,$offset = 0){
284
+	public function queryRefundByOutRefundNo($out_refund_no, $offset = 0) {
285 285
 		$data = array();
286 286
 		$data["appid"] = $this->config["app_id"];
287 287
 		$data["out_refund_no"] = $out_refund_no;
@@ -296,11 +296,11 @@  discard block
 block discarded – undo
296 296
 	 * @param $out_trade_no string 商户订单号
297 297
 	 * @return array
298 298
 	 */
299
-	public function closeOrder($out_trade_no){
299
+	public function closeOrder($out_trade_no) {
300 300
 		$data = array();
301 301
 		$data["appid"] = $this->config["app_id"];
302 302
 		$data["out_trade_no"] = $out_trade_no;
303
-		$result = $this->post(self::URL_CLOSEORDER, $data,false);
303
+		$result = $this->post(self::URL_CLOSEORDER, $data, false);
304 304
 		return $result;
305 305
 	}
306 306
 
@@ -315,14 +315,14 @@  discard block
 block discarded – undo
315 315
 	 * @param $ext array 扩展数组
316 316
 	 * @return array
317 317
 	 */
318
-	public function refundByOutTradeNo($out_trade_no,$out_refund_no,$total_fee,$refund_fee,$ext = array()){
319
-		$data = ($ext && is_array($ext))?$ext:array();
318
+	public function refundByOutTradeNo($out_trade_no, $out_refund_no, $total_fee, $refund_fee, $ext = array()) {
319
+		$data = ($ext && is_array($ext)) ? $ext : array();
320 320
 		$data["appid"] = $this->config["app_id"];
321 321
 		$data["out_trade_no"] = $out_trade_no;
322 322
 		$data["out_refund_no"] = $out_refund_no;
323 323
 		$data["total_fee"] = $total_fee;
324 324
 		$data["refund_fee"] = $refund_fee;
325
-		$result = $this->post(self::URL_REFUND, $data,true);
325
+		$result = $this->post(self::URL_REFUND, $data, true);
326 326
 		return $result;
327 327
 	}
328 328
 
@@ -337,14 +337,14 @@  discard block
 block discarded – undo
337 337
 	 * @param $ext array 扩展数组
338 338
 	 * @return array
339 339
 	 */
340
-	public function refundByTransactionId($transaction_id,$out_refund_no,$total_fee,$refund_fee,$ext = array()){
341
-		$data = ($ext && is_array($ext))?$ext:array();
340
+	public function refundByTransactionId($transaction_id, $out_refund_no, $total_fee, $refund_fee, $ext = array()) {
341
+		$data = ($ext && is_array($ext)) ? $ext : array();
342 342
 		$data["appid"] = $this->config["app_id"];
343 343
 		$data["transaction_id"] = $transaction_id;
344 344
 		$data["out_refund_no"] = $out_refund_no;
345 345
 		$data["total_fee"] = $total_fee;
346 346
 		$data["refund_fee"] = $refund_fee;
347
-		$result = $this->post(self::URL_REFUND, $data,true);
347
+		$result = $this->post(self::URL_REFUND, $data, true);
348 348
 		return $result;
349 349
 	}
350 350
 
@@ -355,7 +355,7 @@  discard block
 block discarded – undo
355 355
 	 * @param $bill_type string 类型 ALL|SUCCESS
356 356
 	 * @return array
357 357
 	 */
358
-	public function downloadBill($bill_date,$bill_type = 'ALL'){
358
+	public function downloadBill($bill_date, $bill_type = 'ALL') {
359 359
 		$data = array();
360 360
 		$data["appid"] = $this->config["app_id"];
361 361
 		$data["bill_date"] = $bill_date;
@@ -372,7 +372,7 @@  discard block
 block discarded – undo
372 372
 	 * @param $tar_type string 压缩账单
373 373
 	 * @return array
374 374
 	 */
375
-	public function downloadFundFlow($bill_date,$account_type = self::ACCOUNTTYPE_BASIC,$tar_type = 'GZIP'){
375
+	public function downloadFundFlow($bill_date, $account_type = self::ACCOUNTTYPE_BASIC, $tar_type = 'GZIP') {
376 376
 		$data = array();
377 377
 		$data["appid"] = $this->config["app_id"];
378 378
 		$data["bill_date"] = $bill_date;
@@ -391,14 +391,14 @@  discard block
 block discarded – undo
391 391
 	 * @param int $limit 条数
392 392
 	 * @return array
393 393
 	 */
394
-	public function batchQueryComment($begin_time,$end_time,$offset = 0,$limit = 200){
394
+	public function batchQueryComment($begin_time, $end_time, $offset = 0, $limit = 200) {
395 395
 		$data = array();
396 396
 		$data["appid"] = $this->config["app_id"];
397 397
 		$data["begin_time"] = $begin_time;
398 398
 		$data["end_time"] = $end_time;
399 399
 		$data["offset"] = $offset;
400 400
 		$data["limit"] = $limit;
401
-		$data["sign"] = $this->sign($data,WechatPay::SIGNTYPE_HMACSHA256);
401
+		$data["sign"] = $this->sign($data, WechatPay::SIGNTYPE_HMACSHA256);
402 402
 		$result = $this->post(self::URL_BATCHQUERYCOMMENT, $data, true); //cert is required
403 403
 		return $result;
404 404
 	}
@@ -410,11 +410,11 @@  discard block
 block discarded – undo
410 410
 	 * @return null
411 411
 	 * @throws Exception
412 412
 	 */
413
-	public function onPaidNotify($notify_data,callable $callback = null){
414
-		if(!is_array($notify_data)) $notify_data = $this->xml2array($notify_data);
415
-		if(!$this->validateSign($notify_data)) throw new Exception('Invalid paid notify data');
416
-		if($callback && is_callable($callback)){
417
-			return call_user_func_array( $callback , [$notify_data] );
413
+	public function onPaidNotify($notify_data, callable $callback = null) {
414
+		if (!is_array($notify_data)) $notify_data = $this->xml2array($notify_data);
415
+		if (!$this->validateSign($notify_data)) throw new Exception('Invalid paid notify data');
416
+		if ($callback && is_callable($callback)) {
417
+			return call_user_func_array($callback, [$notify_data]);
418 418
 		}
419 419
 	}
420 420
 
@@ -425,11 +425,11 @@  discard block
 block discarded – undo
425 425
 	 * @return mixed
426 426
 	 * @throws Exception
427 427
 	 */
428
-	public function onRefundedNotify($notify_data,callable $callback = null){
429
-		if(!is_array($notify_data)) $notify_data = $this->xml2array($notify_data);
430
-		if(!$this->validateSign($notify_data)) throw new Exception('Invalid refund notify data');
431
-		if($callback && is_callable($callback)){
432
-			return call_user_func_array( $callback ,[$notify_data] );
428
+	public function onRefundedNotify($notify_data, callable $callback = null) {
429
+		if (!is_array($notify_data)) $notify_data = $this->xml2array($notify_data);
430
+		if (!$this->validateSign($notify_data)) throw new Exception('Invalid refund notify data');
431
+		if ($callback && is_callable($callback)) {
432
+			return call_user_func_array($callback, [$notify_data]);
433 433
 		}
434 434
 	}
435 435
 
@@ -455,13 +455,13 @@  discard block
 block discarded – undo
455 455
 	 * @param bool $print
456 456
 	 * @return string
457 457
 	 */
458
-	public function responseNotify($print = true,$data = [],$return_code="SUCCESS", $return_msg= 'OK') {
458
+	public function responseNotify($print = true, $data = [], $return_code = "SUCCESS", $return_msg = 'OK') {
459 459
 		$data["return_code"] = $return_code;
460 460
 		if ($return_msg) {
461 461
 			$data["return_msg"] = $return_msg;
462 462
 		}
463 463
 		$xml = $this->array2xml($data);
464
-		if($print === true) print $xml;
464
+		if ($print === true) print $xml;
465 465
 		else return $xml;
466 466
 	}
467 467
 
@@ -481,8 +481,8 @@  discard block
 block discarded – undo
481 481
 	 * @param string $err_code_des
482 482
 	 * @return array
483 483
 	 */
484
-	public function report($interface_url,$execution_time,$return_code,$result_code,$user_ip,$out_trade_no = null,$time = null,$device_info = null,
485
-	                       $return_msg = null,$err_code = null,$err_code_des = null){
484
+	public function report($interface_url, $execution_time, $return_code, $result_code, $user_ip, $out_trade_no = null, $time = null, $device_info = null,
485
+	                       $return_msg = null, $err_code = null, $err_code_des = null) {
486 486
 		$data = array();
487 487
 		$data["appid"] = $this->config["app_id"];
488 488
 		$data["interface_url"] = $interface_url;
@@ -490,12 +490,12 @@  discard block
 block discarded – undo
490 490
 		$data["return_code"] = $return_code;
491 491
 		$data["result_code"] = $result_code;
492 492
 		$data["user_ip"] = $user_ip;
493
-		if($out_trade_no) $data["out_trade_no"] = $out_trade_no;
494
-		if($time) $data["time"] = $time;
495
-		if($device_info) $data["device_info"] = $device_info;
496
-		if($return_msg) $data["return_msg"] = $return_msg;
497
-		if($err_code) $data["err_code"] = $err_code;
498
-		if($err_code_des) $data["err_code_des"] = $err_code_des;
493
+		if ($out_trade_no) $data["out_trade_no"] = $out_trade_no;
494
+		if ($time) $data["time"] = $time;
495
+		if ($device_info) $data["device_info"] = $device_info;
496
+		if ($return_msg) $data["return_msg"] = $return_msg;
497
+		if ($err_code) $data["err_code"] = $err_code;
498
+		if ($err_code_des) $data["err_code_des"] = $err_code_des;
499 499
 		return $this->post(self::URL_REPORT, $data, false);
500 500
 	}
501 501
 
@@ -505,11 +505,11 @@  discard block
 block discarded – undo
505 505
 	 * @param $longurl
506 506
 	 * @return string
507 507
 	 */
508
-	public function shortUrl($longurl){
508
+	public function shortUrl($longurl) {
509 509
 		$data = array();
510 510
 		$data["appid"] = $this->config["app_id"];
511 511
 		$data["long_url"] = $longurl;
512
-		$result = $this->post(self::URL_SHORTURL,$data,false);
512
+		$result = $this->post(self::URL_SHORTURL, $data, false);
513 513
 		return $result['short_url'];
514 514
 	}
515 515
 
@@ -518,10 +518,10 @@  discard block
 block discarded – undo
518 518
 	 * @link https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=23_1
519 519
 	 * @return array
520 520
 	 */
521
-	public function getSignKey(){
521
+	public function getSignKey() {
522 522
 		$data = array();
523 523
 		$data["mch_id"] = $this->config["mch_id"];
524
-		$result = $this->post($this->getSignKeyUrl,$data,false);
524
+		$result = $this->post($this->getSignKeyUrl, $data, false);
525 525
 		return $result['sandbox_signkey'];
526 526
 	}
527 527
 
@@ -531,8 +531,8 @@  discard block
 block discarded – undo
531 531
 	 * @param string $ticket
532 532
 	 * @return array
533 533
 	 */
534
-	public function getSignPackage($url, $ticket = null){
535
-		if(!$ticket) $ticket = $this->getTicket();
534
+	public function getSignPackage($url, $ticket = null) {
535
+		if (!$ticket) $ticket = $this->getTicket();
536 536
 		$timestamp = time();
537 537
 		$nonceStr = $this->getNonceStr();
538 538
 		$rawString = "jsapi_ticket=$ticket&noncestr=$nonceStr&timestamp=$timestamp&url=$url";
@@ -554,29 +554,29 @@  discard block
 block discarded – undo
554 554
 	 * @param boolean $cache
555 555
 	 * @return string
556 556
 	 */
557
-	public function getTicket($cache = true){
557
+	public function getTicket($cache = true) {
558 558
 		$ticket = null;
559 559
 		$cacheKey = 'jsapi_ticket';
560
-		if($cache === true){
560
+		if ($cache === true) {
561 561
 			$data = $this->cacheProvider->get($cacheKey);
562 562
 			if ($data && $data->expires_at > time()) {
563 563
 				$ticket = $data->ticket;
564 564
 			}
565 565
 		}
566
-		if(!$ticket){
566
+		if (!$ticket) {
567 567
 			$data = $this->getWechatOAuth()->getTicket();
568
-			if($cache === true){
569
-				$this->cacheProvider->set($cacheKey,$data,time() + $data->expires_in);
568
+			if ($cache === true) {
569
+				$this->cacheProvider->set($cacheKey, $data, time() + $data->expires_in);
570 570
 			}
571 571
 			$ticket = $data->ticket;
572 572
 		}
573 573
 		return $ticket;
574 574
 	}
575 575
 
576
-	protected function post($url, $data,$cert = true) {
577
-		if(!isset($data['mch_id']) && !isset($data['mchid'])) $data["mch_id"] = $this->config["mch_id"];
578
-		if(!isset($data['nonce_str'])) $data["nonce_str"] = $this->getNonceStr();
579
-		if(!isset($data['sign'])) $data['sign'] = $this->sign($data);
576
+	protected function post($url, $data, $cert = true) {
577
+		if (!isset($data['mch_id']) && !isset($data['mchid'])) $data["mch_id"] = $this->config["mch_id"];
578
+		if (!isset($data['nonce_str'])) $data["nonce_str"] = $this->getNonceStr();
579
+		if (!isset($data['sign'])) $data['sign'] = $this->sign($data);
580 580
 		$this->requestXML = $this->responseXML = null;
581 581
 		$this->requestArray = $this->responseArray = null;
582 582
 
@@ -588,23 +588,23 @@  discard block
 block discarded – undo
588 588
 			CURLOPT_RETURNTRANSFER => true,
589 589
 			CURLOPT_TIMEOUT => 10
590 590
 		];
591
-		if($cert == true){
591
+		if ($cert == true) {
592 592
 			$opts[CURLOPT_SSLCERTTYPE] = 'PEM';
593 593
 			$opts[CURLOPT_SSLCERT] = $this->config['ssl_cert_path'];
594 594
 			$opts[CURLOPT_SSLKEYTYPE] = 'PEM';
595 595
 			$opts[CURLOPT_SSLKEY] = $this->config['ssl_key_path'];
596 596
 		}
597 597
 		$processResponse = true;
598
-		if(in_array($url,[self::URL_DOWNLOADBILL,self::URL_DOWNLOAD_FUND_FLOW,self::URL_BATCHQUERYCOMMENT])){
598
+		if (in_array($url, [self::URL_DOWNLOADBILL, self::URL_DOWNLOAD_FUND_FLOW, self::URL_BATCHQUERYCOMMENT])) {
599 599
 			$processResponse = false;
600 600
 		}
601
-		if($this->sandbox === true) $url = "sandboxnew/{$url}";
601
+		if ($this->sandbox === true) $url = "sandboxnew/{$url}";
602 602
 
603
-		$content = $this->httpClient->post(self::API_ENDPOINT . $url,$this->requestXML,[],$opts);
604
-		if(!$content) throw new Exception("Empty response with {$this->requestXML}");
603
+		$content = $this->httpClient->post(self::API_ENDPOINT.$url, $this->requestXML, [], $opts);
604
+		if (!$content) throw new Exception("Empty response with {$this->requestXML}");
605 605
 
606 606
 		$this->responseXML = $content;
607
-		if($processResponse)
607
+		if ($processResponse)
608 608
 			return $this->processResponseXML($this->responseXML);
609 609
 		else return $this->responseXML;
610 610
 	}
@@ -614,51 +614,51 @@  discard block
 block discarded – undo
614 614
 	 * @return array
615 615
 	 * @throws Exception
616 616
 	 */
617
-	private function processResponseXML($responseXML){
617
+	private function processResponseXML($responseXML) {
618 618
 		$result = $this->xml2array($responseXML);
619 619
 		$this->responseArray = $result;
620
-		if(empty($result['return_code'])){
620
+		if (empty($result['return_code'])) {
621 621
 			throw new Exception("No return code presents in {$this->responseXML}");
622 622
 		}
623 623
 		$this->returnCode = $result["return_code"];
624
-		$this->returnMsg = isset($result['return_msg'])?$result['return_msg']:'';
624
+		$this->returnMsg = isset($result['return_msg']) ? $result['return_msg'] : '';
625 625
 
626 626
 		if ($this->returnCode == "SUCCESS") {
627
-			if(isset($result['result_code']) && $result['result_code'] == "FAIL"){
627
+			if (isset($result['result_code']) && $result['result_code'] == "FAIL") {
628 628
 				$this->resultCode = $result['result_code'];
629 629
 				$this->errCode = $result['err_code'];
630 630
 				$this->errCodeDes = $result['err_code_des'];
631 631
 				throw new Exception("[$this->errCode]$this->errCodeDes");
632
-			}else{
632
+			}else {
633 633
 				return $result;
634 634
 			}
635
-		} else if($this->returnCode == 'FAIL'){
635
+		}else if ($this->returnCode == 'FAIL') {
636 636
 			throw new Exception($this->returnMsg);
637 637
 		}
638 638
 	}
639 639
 
640
-	public function sign($data,$sign_type = WechatPay::SIGNTYPE_MD5) {
640
+	public function sign($data, $sign_type = WechatPay::SIGNTYPE_MD5) {
641 641
 		ksort($data);
642 642
 		$string1 = "";
643 643
 		foreach ($data as $k => $v) {
644
-			if ($v && trim($v)!='') {
644
+			if ($v && trim($v) != '') {
645 645
 				$string1 .= "$k=$v&";
646 646
 			}
647 647
 		}
648
-		$stringSignTemp = $string1 . "key=" . $this->config["api_key"];
649
-		if($sign_type == WechatPay::SIGNTYPE_MD5){
648
+		$stringSignTemp = $string1."key=".$this->config["api_key"];
649
+		if ($sign_type == WechatPay::SIGNTYPE_MD5) {
650 650
 			$sign = strtoupper(md5($stringSignTemp));
651
-		}elseif($sign_type == WechatPay::SIGNTYPE_HMACSHA256){
652
-			$sign = strtoupper(hash_hmac('sha256',$stringSignTemp,$this->config["api_key"]));
651
+		}elseif ($sign_type == WechatPay::SIGNTYPE_HMACSHA256) {
652
+			$sign = strtoupper(hash_hmac('sha256', $stringSignTemp, $this->config["api_key"]));
653 653
 		}else throw new Exception("Not supported sign type - $sign_type");
654 654
 		return $sign;
655 655
 	}
656 656
 
657 657
 	private function array2xml($array) {
658
-		$xml = "<xml>" . PHP_EOL;
658
+		$xml = "<xml>".PHP_EOL;
659 659
 		foreach ($array as $k => $v) {
660
-			if($v && trim($v)!='')
661
-				$xml .= "<$k><![CDATA[$v]]></$k>" . PHP_EOL;
660
+			if ($v && trim($v) != '')
661
+				$xml .= "<$k><![CDATA[$v]]></$k>".PHP_EOL;
662 662
 		}
663 663
 		$xml .= "</xml>";
664 664
 		return $xml;
@@ -667,14 +667,14 @@  discard block
 block discarded – undo
667 667
 	private function xml2array($xml) {
668 668
 		$array = [];
669 669
 		$tmp = (array) simplexml_load_string($xml);
670
-		foreach ( $tmp as $k => $v) {
670
+		foreach ($tmp as $k => $v) {
671 671
 			$array[$k] = (string) $v;
672 672
 		}
673 673
 		return $array;
674 674
 	}
675 675
 
676 676
 	protected function getNonceStr() {
677
-		return substr(str_shuffle("abcdefghijklmnopqrstuvwxyz0123456789"),0,32);
677
+		return substr(str_shuffle("abcdefghijklmnopqrstuvwxyz0123456789"), 0, 32);
678 678
 	}
679 679
 
680 680
 }
681 681
\ No newline at end of file
Please login to merge, or discard this patch.
Braces   +72 added lines, -28 removed lines patch added patch discarded remove patch
@@ -187,11 +187,15 @@  discard block
 block discarded – undo
187 187
 		$data["notify_url"] = $this->config["notify_url"];
188 188
 		$data["trade_type"] = $params['trade_type'];
189 189
 		if($params['trade_type'] == WechatPay::TRADETYPE_NATIVE){
190
-			if(!isset($params['product_id'])) throw new Exception('product_id is required when trade_type is NATIVE');
190
+			if(!isset($params['product_id'])) {
191
+				throw new Exception('product_id is required when trade_type is NATIVE');
192
+			}
191 193
 			$data["product_id"] = $params['product_id'];
192 194
 		}
193 195
 		if($params['trade_type'] == WechatPay::TRADETYPE_JSAPI){
194
-			if(!isset($params['openid'])) throw new Exception('openid is required when trade_type is JSAPI');
196
+			if(!isset($params['openid'])) {
197
+				throw new Exception('openid is required when trade_type is JSAPI');
198
+			}
195 199
 			$data["openid"] = $params['openid'];
196 200
 		}
197 201
 		$result = $this->post(self::URL_UNIFIEDORDER, $data);
@@ -411,8 +415,12 @@  discard block
 block discarded – undo
411 415
 	 * @throws Exception
412 416
 	 */
413 417
 	public function onPaidNotify($notify_data,callable $callback = null){
414
-		if(!is_array($notify_data)) $notify_data = $this->xml2array($notify_data);
415
-		if(!$this->validateSign($notify_data)) throw new Exception('Invalid paid notify data');
418
+		if(!is_array($notify_data)) {
419
+			$notify_data = $this->xml2array($notify_data);
420
+		}
421
+		if(!$this->validateSign($notify_data)) {
422
+			throw new Exception('Invalid paid notify data');
423
+		}
416 424
 		if($callback && is_callable($callback)){
417 425
 			return call_user_func_array( $callback , [$notify_data] );
418 426
 		}
@@ -426,8 +434,12 @@  discard block
 block discarded – undo
426 434
 	 * @throws Exception
427 435
 	 */
428 436
 	public function onRefundedNotify($notify_data,callable $callback = null){
429
-		if(!is_array($notify_data)) $notify_data = $this->xml2array($notify_data);
430
-		if(!$this->validateSign($notify_data)) throw new Exception('Invalid refund notify data');
437
+		if(!is_array($notify_data)) {
438
+			$notify_data = $this->xml2array($notify_data);
439
+		}
440
+		if(!$this->validateSign($notify_data)) {
441
+			throw new Exception('Invalid refund notify data');
442
+		}
431 443
 		if($callback && is_callable($callback)){
432 444
 			return call_user_func_array( $callback ,[$notify_data] );
433 445
 		}
@@ -461,8 +473,11 @@  discard block
 block discarded – undo
461 473
 			$data["return_msg"] = $return_msg;
462 474
 		}
463 475
 		$xml = $this->array2xml($data);
464
-		if($print === true) print $xml;
465
-		else return $xml;
476
+		if($print === true) {
477
+			print $xml;
478
+		} else {
479
+			return $xml;
480
+		}
466 481
 	}
467 482
 
468 483
 	/**
@@ -490,12 +505,24 @@  discard block
 block discarded – undo
490 505
 		$data["return_code"] = $return_code;
491 506
 		$data["result_code"] = $result_code;
492 507
 		$data["user_ip"] = $user_ip;
493
-		if($out_trade_no) $data["out_trade_no"] = $out_trade_no;
494
-		if($time) $data["time"] = $time;
495
-		if($device_info) $data["device_info"] = $device_info;
496
-		if($return_msg) $data["return_msg"] = $return_msg;
497
-		if($err_code) $data["err_code"] = $err_code;
498
-		if($err_code_des) $data["err_code_des"] = $err_code_des;
508
+		if($out_trade_no) {
509
+			$data["out_trade_no"] = $out_trade_no;
510
+		}
511
+		if($time) {
512
+			$data["time"] = $time;
513
+		}
514
+		if($device_info) {
515
+			$data["device_info"] = $device_info;
516
+		}
517
+		if($return_msg) {
518
+			$data["return_msg"] = $return_msg;
519
+		}
520
+		if($err_code) {
521
+			$data["err_code"] = $err_code;
522
+		}
523
+		if($err_code_des) {
524
+			$data["err_code_des"] = $err_code_des;
525
+		}
499 526
 		return $this->post(self::URL_REPORT, $data, false);
500 527
 	}
501 528
 
@@ -532,7 +559,9 @@  discard block
 block discarded – undo
532 559
 	 * @return array
533 560
 	 */
534 561
 	public function getSignPackage($url, $ticket = null){
535
-		if(!$ticket) $ticket = $this->getTicket();
562
+		if(!$ticket) {
563
+			$ticket = $this->getTicket();
564
+		}
536 565
 		$timestamp = time();
537 566
 		$nonceStr = $this->getNonceStr();
538 567
 		$rawString = "jsapi_ticket=$ticket&noncestr=$nonceStr&timestamp=$timestamp&url=$url";
@@ -574,9 +603,15 @@  discard block
 block discarded – undo
574 603
 	}
575 604
 
576 605
 	protected function post($url, $data,$cert = true) {
577
-		if(!isset($data['mch_id']) && !isset($data['mchid'])) $data["mch_id"] = $this->config["mch_id"];
578
-		if(!isset($data['nonce_str'])) $data["nonce_str"] = $this->getNonceStr();
579
-		if(!isset($data['sign'])) $data['sign'] = $this->sign($data);
606
+		if(!isset($data['mch_id']) && !isset($data['mchid'])) {
607
+			$data["mch_id"] = $this->config["mch_id"];
608
+		}
609
+		if(!isset($data['nonce_str'])) {
610
+			$data["nonce_str"] = $this->getNonceStr();
611
+		}
612
+		if(!isset($data['sign'])) {
613
+			$data['sign'] = $this->sign($data);
614
+		}
580 615
 		$this->requestXML = $this->responseXML = null;
581 616
 		$this->requestArray = $this->responseArray = null;
582 617
 
@@ -598,15 +633,21 @@  discard block
 block discarded – undo
598 633
 		if(in_array($url,[self::URL_DOWNLOADBILL,self::URL_DOWNLOAD_FUND_FLOW,self::URL_BATCHQUERYCOMMENT])){
599 634
 			$processResponse = false;
600 635
 		}
601
-		if($this->sandbox === true) $url = "sandboxnew/{$url}";
636
+		if($this->sandbox === true) {
637
+			$url = "sandboxnew/{$url}";
638
+		}
602 639
 
603 640
 		$content = $this->httpClient->post(self::API_ENDPOINT . $url,$this->requestXML,[],$opts);
604
-		if(!$content) throw new Exception("Empty response with {$this->requestXML}");
641
+		if(!$content) {
642
+			throw new Exception("Empty response with {$this->requestXML}");
643
+		}
605 644
 
606 645
 		$this->responseXML = $content;
607
-		if($processResponse)
608
-			return $this->processResponseXML($this->responseXML);
609
-		else return $this->responseXML;
646
+		if($processResponse) {
647
+					return $this->processResponseXML($this->responseXML);
648
+		} else {
649
+			return $this->responseXML;
650
+		}
610 651
 	}
611 652
 
612 653
 	/**
@@ -629,7 +670,7 @@  discard block
 block discarded – undo
629 670
 				$this->errCode = $result['err_code'];
630 671
 				$this->errCodeDes = $result['err_code_des'];
631 672
 				throw new Exception("[$this->errCode]$this->errCodeDes");
632
-			}else{
673
+			} else{
633 674
 				return $result;
634 675
 			}
635 676
 		} else if($this->returnCode == 'FAIL'){
@@ -648,17 +689,20 @@  discard block
 block discarded – undo
648 689
 		$stringSignTemp = $string1 . "key=" . $this->config["api_key"];
649 690
 		if($sign_type == WechatPay::SIGNTYPE_MD5){
650 691
 			$sign = strtoupper(md5($stringSignTemp));
651
-		}elseif($sign_type == WechatPay::SIGNTYPE_HMACSHA256){
692
+		} elseif($sign_type == WechatPay::SIGNTYPE_HMACSHA256){
652 693
 			$sign = strtoupper(hash_hmac('sha256',$stringSignTemp,$this->config["api_key"]));
653
-		}else throw new Exception("Not supported sign type - $sign_type");
694
+		} else {
695
+			throw new Exception("Not supported sign type - $sign_type");
696
+		}
654 697
 		return $sign;
655 698
 	}
656 699
 
657 700
 	private function array2xml($array) {
658 701
 		$xml = "<xml>" . PHP_EOL;
659 702
 		foreach ($array as $k => $v) {
660
-			if($v && trim($v)!='')
661
-				$xml .= "<$k><![CDATA[$v]]></$k>" . PHP_EOL;
703
+			if($v && trim($v)!='') {
704
+							$xml .= "<$k><![CDATA[$v]]></$k>" . PHP_EOL;
705
+			}
662 706
 		}
663 707
 		$xml .= "</xml>";
664 708
 		return $xml;
Please login to merge, or discard this patch.