到此为止,若是项目没有订单线上退款就完成了。
订单退款相关
public function refundUnionPay($orders)
{
require_once(dirname(dirname(__FILE__)) . "/Model/unionpay-sdk/sdk/acp_service.php");
set_time_limit(100);
$config = new SDKConfig();
$AcpService = new AcpService();
$log = LogUtil::getLogger();
$number = 0;
do{//循环查询,直到获取到退款订单的queryID
sleep($number * 2);
$query = $this->unionPayQuery('', $orders);
$number += 1;
}while($query['errorCode'] != 0 || empty($query['result_arr']["queryId"]));
if ($query['errorCode'] != 0) {
return array('errorCode'=>1, 'message'=>'订单未成交,无法退款');
}
$params = array(
//以下信息非特殊情况不需要改动
'version' => $config->getSDKConfig()->version, //版本号
'encoding' => 'utf-8', //编码方式
'signMethod' => $config->getSDKConfig()->signMethod, //签名方法
'txnType' => '04', //交易类型
'txnSubType' => '00', //交易子类
'bizType' => '000201', //业务类型
'accessType' => '0', //接入类型
'channelType' => '07', //渠道类型
'backUrl' => $config->getSDKConfig()->backUrl, //后台通知地址
//TODO 以下信息需要填写
'orderId' => "T" . $orders['order_no'], //商户订单号,8-32位数字字母,不能含“-”或“_”,可以自行定制规则,重新产生-此处为在退款订单前拼接 T
'merId' => $this->getParameter('mer_id'), //商户代码,请改成自己的商户号
'origQryId' => $query['result_arr']["queryId"], //原消费的queryId,可以从查询接口或者通知接口中获取
'txnTime' => date('YmdHis', time()), //订单发送时间,格式为YYYYMMDDhhmmss,重新产生,不同于原消费
'txnAmt' => $orders['total_price'] * 100, //交易金额,退货总金额需要小于等于原消费
);
$AcpService->sign ( $params ); // 签名
$url = $config->getSDKConfig()->backTransUrl;
$result_arr = $AcpService->post ( $params, $url);
if(count($result_arr)<=0) { //没收到200应答的情况 return array('errorCode'=>1, 'message'=>"没收到应答.");
}
if (!$AcpService->validate ($result_arr) ){
return array('errorCode'=>1, 'message'=>"应答报文验签失败.");
}
if ($result_arr["respCode"] == "00"){
//交易已受理,等待接收后台通知更新订单状态,如果通知长时间未收到也可发起交易状态查询
return array('errorCode'=>0, 'message'=>"受理成功.");
} else if ($result_arr["respCode"] == "03"
|| $result_arr["respCode"] == "04"
|| $result_arr["respCode"] == "05" ){
//后续需发起交易状态查询交易确定交易状态
return array('errorCode'=>1, 'message'=>"处理超时,请稍微查询.");
} else {
//其他应答码做以失败处理
return array('errorCode'=>1, 'message'=>"失败:" . $result_arr["respMsg"] . ".");
}
}







