關於引用微信支付的配置文件,請看我上一篇文章《tp5+微信公衆號支付》,閒話少說,直接上代碼,php
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,裏面各路大神爲您保駕護航,算法