官方文档 https://docs.open.alipay.com/api_1/alipay.trade.refund
把配置弄好 基本是直接成功了。
/**
* 支付宝 退款
* @user 一秋
* @param $out_trade_no
* @param $refund_amount
* @return bool
* @throws Exception
*/
public static function AliPayPlaceRefund($out_trade_no,$refund_amount){
$refund_order = generateOrderId(9);
$aop = new \AopClient ();
$aop->gatewayUrl = config('alipay.gatewayUrl');
$aop->appId = config('alipay.appId');
$aop->rsaPrivateKey = config('alipay.rsaPrivateKey');
$aop->alipayrsaPublicKey = config('alipay.alipayrsaPublicKey');
$aop->apiVersion = '1.0';
$aop->signType = 'RSA2';
$aop->postCharset='utf-8';
$aop->format='json';
$request = new \AlipayTradeRefundRequest();
$request->setBizContent("{" .
// "\"trade_no\":\"2017112821001004030523090753\"," .
"\"out_trade_no\":\"$out_trade_no\"," .
"\"refund_amount\":$refund_amount," .
"\"refund_reason\":\"正常退款\"," .
"\"out_request_no\":\"$refund_order\"," .
"\"operator_id\":\"OP001\"," .
"\"store_id\":\"NJ_S_001\"," .
"\"terminal_id\":\"NJ_T_001\"" .
" }");
$result = $aop->execute ( $request );
$responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";
$resultCode = $result->$responseNode->code;
if(!empty($resultCode)&&$resultCode == 10000){
// echo "成功";
return true;
} else {
// echo "失败";
throw new Exception($result->$responseNode->sub_msg);
}
}