关于引用微信支付的配置文件,请看我上一篇文章《tp5+微信公众号支付》,闲话少说,直接上代码,
public function productRefund()
{
$succList = [];
$condition = [
'status' => OrderConstant::ORDER_REFUND_NOT,
'refund_time' => array('elt', date('Y-m-d H:i:s')),
];
$merchant_refund = ModelLoader::MerchantRefundModel()->where($condition)->field('order_id,out_refund_no,refund_time')->limit(50)->select()->toArray();
if (!empty($merchant_refund)) {
foreach ($merchant_refund as $key => $item) {
$order = MerchantOrderModel::getOne(['order_id' => $item['order_id']], 'order_code,amount,deposit');
if (empty($order)) {
return json(['code' => 400, 'msg' => '订单不存在']);
}
$input = new \WxPayRefund();
$input->SetOut_trade_no($order['order_code']);//商户内部订单号
$input->SetTotal_fee($order['amount'] * 100);
$input->SetRefund_fee($order['deposit'] * 100-1);
$input->SetOut_refund_no($item['out_refund_no']);
$config = new \WxPayConfig();
$input->SetOp_user_id($config->GetMerchantId());
$result = \WxPayApi::refund($config, $input); //退款,该方法中包含了签名算法
if (array_key_exists("return_code", $result)
&& array_key_exists("result_code", $result)
&& $result["return_code"] == "SUCCESS"
&& $result["result_code"] == "SUCCESS") {
$succList[] = $item['order_id'];
MerchantOrderModel::updateData(['order_id' => $item['order_id']], ['order_status' => OrderConstant::ORDER_STATUS_REFUND]);
$this->payLog($item['order_id'], $result, 2);
} else {
MerchantOrderModel::updateData(['order_id' => $item['order_id']], ['order_status' => OrderConstant::ORDER_STATUS_REFUND_ERROR]);
$this->payLog($item['order_id'], $result, 2, 2);
}
}
if (!$succList) {
return json(['code' => 401, 'msg' => '暂无退款']);
}
$condition['order_id'] = array('in', implode($succList, ','));
MerchantRefundModel::updateData($condition, ['status' => OrderConstant::ORDER_REFUND_DONE]);
return json(['code' => 200, 'msg' => '退款成功']);
}
}
更多php技术交流,可加Q群:884743303,里面各路大神为您保驾护航,