开发背景:刚开始使用支付宝支付的时候挺顺利的,最后因为突然想开发下支付宝的退款功能,就重新开始捣鼓了起来,但是把支付价格改为原价格之后,支付的时候忘记了,所以就支付了几百块钱,于是迅速的开始查阅相关的支付宝退款说明和操作,最终将支付宝的退款操作成功解决:
参考链接:
1.https://blog.csdn.net/qq_35765928/article/details/79915409
2.https://www.cnblogs.com/wqy415/p/7977776.html
个人代码粘贴:
<?php
/**
* tpshop 支付宝插件
* ============================================================================
* 版权所有 2015-2027 深圳搜豹网络科技有限公司,并保留所有权利。
* 网站地址: http://www.tp-shop.cn
* ----------------------------------------------------------------------------
* Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
* ============================================================================
* Author: IT宇宙人
* Date: 2015-09-09
*/
//namespace plugins\payment\alipay;
use think\Model;
use think\Request;
/**
* 支付 逻辑定义
* Class AlipayPayment
* @package Home\Payment
*/
class alipayApp extends Model{
public $tableName = 'plugin'; // 插件表
public $alipay_config = array();// 支付宝支付配置参数
/**
* 析构流函数
*/
public function __construct() {
parent::__construct();
$paymentPlugin = M('Plugin')->where("code='alipayApp' and type = 'payment' ")->find(); // 找到支付插件的配置
$config_value = unserialize($paymentPlugin['config_value']); // 配置反序列化
$this->alipay_config['appid'] = trim(''); // APPID
$this->alipay_config['alipay_rsa_public_key'] = trim('');//应用公钥
$this->alipay_config['rsa_private_key'] = trim('');//应用私钥
$this->alipay_config['account_name'] = empty($config_value['alipay_account_name']) ? '' : $config_value['alipay_account_name'];//个人支付宝账号是真实姓名公司支付宝账号是公司名称
$this->alipay_config['key'] = $config_value['alipay_key'];//安全检验码,以数字和字母组成的32位字符
$this->alipay_config['sign_type'] = strtoupper('RSA2');//签名方式 不需修改
$this->alipay_config['input_charset'] = strtolower('utf-8');//字符编码格式 目前支持 gbk 或 utf-8
}
function AliPayPlaceRefund($out_trade_no,$refund_amount,$trade_no){
// var_dump(trim($this->alipay_config['sign_type']));
// var_dump(trim($this->alipay_config['input_charset']));
// exit;
require_once("AopSdk.php"); // 请求返回
// $refund_order = generateOrderId(9);
$refund_order = 'HZ01RF002';
$aop = new AopClient ();
$aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do';
$aop->appId = $this->alipay_config['appid'];
$aop->rsaPrivateKey = trim($this->alipay_config['rsa_private_key']);
$aop->alipayrsaPublicKey = trim($this->alipay_config['alipay_rsa_public_key']);
$aop->apiVersion = '1.0';
// $aop->signType = trim($this->alipay_config['sign_type']);
$aop->signType = 'RSA2';
// $aop->postCharset=trim($this->alipay_config['input_charset']);
$aop->postCharset='utf-8';
// $aop->format="JSON";
$aop->format="json";//使用大写获取到的$resultCode为空
$request = new AlipayTradeRefundRequest();
$request->setBizContent("{" .
// "\"trade_no\":\"$trade_no\"," .
"\"out_trade_no\":\"$out_trade_no\"," .
"\"refund_amount\":$refund_amount," .
"\"refund_reason\":\"正常退款\"," .
"\"out_request_no\":\"HZ01RF001\"," .
"\"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;
var_dump($resultCode);exit;
if(!empty($resultCode)&&$resultCode == 10000){
// echo "成功";
return true;
} else {
// echo "失败";
throw new Exception($result->$responseNode->sub_msg);
}
}
}
需要注意的是:
1.// "\"trade_no\":\"$trade_no\"," .此块可添加也可不添加,都能正确进行退款
2.$aop->format="json";//使用大写获取到的$resultCode为空
3.返回$resultCode不为空且等于10000才表示退款成功!!!