SetTransaction_id($params['transaction_id']); } elseif ($params['out_trade_no']) { $input->SetOut_trade_no($params['out_trade_no']); } $input->SetTotal_fee($params['total_fee']); $input->SetRefund_fee($params['refund_fee']); $input->SetOut_refund_no($params['out_refund_no']); $input->SetOp_user_id(\WxPayConfig::MCHID); $result = \WxPayApi::refund($input); // 3.结果检验 if(!(array_key_exists("return_code", $result) && array_key_exists("result_code", $result) && $result["return_code"] == "SUCCESS" && $result["result_code"] == "SUCCESS")) { if(empty($result['return_msg']) || $result['return_msg'] == 'OK') { throw new \WxPayException('退款错误: '.$result['err_code']." 原因:".$result['err_code_des']); } else { throw new \WxPayException('退款错误: '.$result['return_msg']); } } else { return $result; } } /** * 校检参数 */ private static function checkParams($params) { $rule = [ 'out_trade_no' => function($value) { if(self::QUERY_TYPE == 'out_trade_no' && empty($value)) { return '前通过商户订单号退款, 商户订单号(out_trade_no)必须'; } return true; }, 'transaction_id' => function() { if(self::QUERY_TYPE == 'transaction_id' && empty($value)) { return '当前通过微信订单号退款, 微信订单号(transaction_id)必须'; } return true; }, 'total_fee' => 'require|integer|gt:0', 'refund_fee' => 'require|integer|gt:0|elt:total_fee', 'out_refund_no' => 'require' ]; $msg = [ 'total_fee' => '订单金额(total_fee)单位为分, 必须为正整数', 'refund_fee' => '退款金额(refund_fee)单位为分, 必须为正整数, 且小于等于总金额', 'out_refund_no' => '商户退款单号(out_refund_no)必须', ]; $validate = new \think\Validate($rule, $msg); if (!$validate->check($params)) { throw new \WxPayException($validate->getError()); } } }