public
function
wxpay(
$openid
,
$total_fee
,
$body
,
$order_sn
){
$config
=
$this
->config;
$unifiedorder
=
array
(
'appid'
=>
$config
[
'appid'
],
'mch_id'
=>
$config
[
'mch_id'
],
'nonce_str'
=> self::getNonceStr(),
'body'
=>
$body
,
'out_trade_no'
=>
$order_sn
,
'total_fee'
=>
$total_fee
* 100,
'spbill_create_ip'
=> self::getip(),
'notify_url'
=>
'http://'
.
$_SERVER
[
'HTTP_HOST'
].
'/notify.php'
,
'trade_type'
=>
'JSAPI'
,
'openid'
=>
$openid
);
$unifiedorder
[
'sign'
] = self::makeSign(
$unifiedorder
);
$xmldata
= self::array2xml(
$unifiedorder
);
$res
= self::curl_post_ssl(
$url
,
$xmldata
);
if
(!
$res
){
return
array
(
'status'
=>0,
'msg'
=>
"Can't connect the server"
);
}
$content
= self::xml2array(
$res
);
if
(
strval
(
$content
[
'result_code'
]) ==
'FAIL'
){
return
array
(
'status'
=>0,
'msg'
=>
strval
(
$content
[
'err_code'
]).
':'
.
strval
(
$content
[
'err_code_des'
]));
}
if
(
strval
(
$content
[
'return_code'
]) ==
'FAIL'
){
return
array
(
'status'
=>0,
'msg'
=>
strval
(
$content
[
'return_msg'
]));
}
$time
= time();
settype(
$time
,
"string"
);
$resdata
=
array
(
'appId'
=>
strval
(
$content
[
'appid'
]),
'nonceStr'
=>
strval
(
$content
[
'nonce_str'
]),
'package'
=>
'prepay_id='
.
strval
(
$content
[
'prepay_id'
]),
'signType'
=>
'MD5'
,
'timeStamp'
=>
$time
);
$resdata
[
'paySign'
] = self::makeSign(
$resdata
);
return
json_encode(
$resdata
);
}
public
function
refund(
$transaction_id
,
$out_refund_no
,
$total_fee
,
$refund_fee
){
$config
=
$this
->config;
$refundorder
=
array
(
'appid'
=>
$config
[
'appid'
],
'mch_id'
=>
$config
[
'mch_id'
],
'nonce_str'
=> self::getNonceStr(),
'transaction_id'
=>
$transaction_id
,
'out_refund_no'
=>
$out_refund_no
,
'total_fee'
=>
$total_fee
* 100,
'refund_fee'
=>
$refund_fee
* 100
);
$refundorder
[
'sign'
] = self::makeSign(
$refundorder
);
$xmldata
= self::array2xml(
$refundorder
);
$res
= self::curl_post_ssl(
$url
,
$xmldata
);
if
(!
$res
){
return
array
(
'status'
=>0,
'msg'
=>
"Can't connect the server"
);
}
$content
= self::xml2array(
$res
);
if
(
strval
(
$content
[
'result_code'
]) ==
'FAIL'
){
return
array
(
'status'
=>0,
'msg'
=>
strval
(
$content
[
'err_code'
]).
':'
.
strval
(
$content
[
'err_code_des'
]));
}
if
(
strval
(
$content
[
'return_code'
]) ==
'FAIL'
){
return
array
(
'status'
=>0,
'msg'
=>
strval
(
$content
[
'return_msg'
]));
}
return
$content
;
}