支付宝refund.php,refund.php

/**

* alipay.trade.refund(统一收单交易退款接口)

*

* 当交易发生之后一段时间内,由于买家或者卖家的原因需要退款时,卖家可以通过退款接口将支付款退还给买家,支付宝将在收到退款请求并且验证成功之后,按照退款规则将支付款按原路退到买家帐号上。

*/

header('Content-type:text/html; Charset=utf-8');

/*** 请填写以下配置信息 ***/

$appid = 'xxxxx'; //https://open.alipay.com 账户中心->密钥管理->开放平台密钥,填写添加了电脑网站支付的应用的APPID

$tradeNo = ''; //在支付宝系统中的交易流水号。最短 16 位,最长 64 位。和out_trade_no不能同时为空

$outTradeNo = ''; //订单支付时传入的商户订单号,和支付宝交易号不能同时为空。

$signType = 'RSA2'; //签名算法类型,支持RSA2和RSA,推荐使用RSA2

$refundAmount = 0.01; 需要退款的金额,该金额不能大于订单金额,单位为元,支持两位小数

//商户私钥,填写对应签名算法类型的私钥,如何生成密钥参考:https://docs.open.alipay.com/291/105971和https://docs.open.alipay.com/200/105310

$rsaPrivateKey='';

/*** 配置结束 ***/

$aliPay = new AlipayService();

$aliPay->setAppid($appid);

$aliPay->setRsaPrivateKey($rsaPrivateKey);

$aliPay->setTradeNo($tradeNo);

$aliPay->setOutTradeNo($outTradeNo);

$aliPay->setRefundAmount($refundAmount);

$result = $aliPay->doRefund();

$result = $result['alipay_trade_refund_response'];

if($result['code'] && $result['code']=='10000'){

echo '

退款成功

';

}else{

echo $result['msg'].' : '.$result['sub_msg'];

}

class AlipayService

{

protected $appId;

protected $returnUrl;

protected $notifyUrl;

protected $charset;

//私钥值

protected $rsaPrivateKey;

protected $outTradeNo;

protected $tradeNo;

protected $refundAmount;

public function __construct()

{

$this->charset = 'utf8';

}

public function setAppid($appid)

{

$this->appId = $appid;

}

public function setRsaPrivateKey($saPrivateKey)

{

$this->rsaPrivateKey = $saPrivateKey;

}

public function setOutTradeNo($outTradeNo)

{

$this->outTradeNo = $outTradeNo;

}

public function settradeNo($tradeNo)

{

$this->tradeNo = $tradeNo;

}

public function setRefundAmount($refundAmount)

{

$this->refundAmount = $refundAmount;

}

/**

* 退款

* @return array

*/

public function doRefund()

{

//请求参数

$requestConfigs = array(

'trade_no'=>$this->tradeNo,

'out_trade_no'=>$this->outTradeNo,

'refund_amount'=>$this->refundAmount,

);

$commonConfigs = array(

//公共参数

'app_id' => $this->appId,

'method' => 'alipay.trade.refund', //接口名称

'format' => 'JSON',

'charset'=>$this->charset,

'sign_type'=>'RSA2',

'timestamp'=>date('Y-m-d H:i:s'),

'version'=>'1.0',

'biz_content'=>json_encode($requestConfigs),

);

$commonConfigs["sign"] = $this->generateSign($commonConfigs, $commonConfigs['sign_type']);

$result = $this->curlPost('https://openapi.alipay.com/gateway.do',$commonConfigs);

$resultArr = json_decode($result,true);

if(empty($resultArr)){

$result = iconv('GBK','UTF-8//IGNORE',$result);

return json_decode($result,true);

}

return $resultArr;

}

public function generateSign($params, $signType = "RSA") {

return $this->sign($this->getSignContent($params), $signType);

}

protected function sign($data, $signType = "RSA") {

$priKey=$this->rsaPrivateKey;

$res = "-----BEGIN RSA PRIVATE KEY-----\n" .

wordwrap($priKey, 64, "\n", true) .

"\n-----END RSA PRIVATE KEY-----";

($res) or die('您使用的私钥格式错误,请检查RSA私钥配置');

if ("RSA2" == $signType) {

openssl_sign($data, $sign, $res, version_compare(PHP_VERSION,'5.4.0', '

} else {

openssl_sign($data, $sign, $res);

}

$sign = base64_encode($sign);

return $sign;

}

/**

* 校验$value是否非空

* if not set ,return true;

* if is null , return true;

**/

protected function checkEmpty($value) {

if (!isset($value))

return true;

if ($value === null)

return true;

if (trim($value) === "")

return true;

return false;

}

public function getSignContent($params) {

ksort($params);

$stringToBeSigned = "";

$i = 0;

foreach ($params as $k => $v) {

if (false === $this->checkEmpty($v) && "@" != substr($v, 0, 1)) {

// 转换成目标字符集

$v = $this->characet($v, $this->charset);

if ($i == 0) {

$stringToBeSigned .= "$k" . "=" . "$v";

} else {

$stringToBeSigned .= "&" . "$k" . "=" . "$v";

}

$i++;

}

}

unset ($k, $v);

return $stringToBeSigned;

}

/**

* 转换字符集编码

* @param $data

* @param $targetCharset

* @return string

*/

function characet($data, $targetCharset) {

if (!empty($data)) {

$fileType = $this->charset;

if (strcasecmp($fileType, $targetCharset) != 0) {

$data = mb_convert_encoding($data, $targetCharset, $fileType);

//$data = iconv($fileType, $targetCharset.'//IGNORE', $data);

}

}

return $data;

}

public function curlPost($url = '', $postData = '', $options = array())

{

if (is_array($postData)) {

$postData = http_build_query($postData);

}

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_POST, 1);

curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);

curl_setopt($ch, CURLOPT_TIMEOUT, 30); //设置cURL允许执行的最长秒数

if (!empty($options)) {

curl_setopt_array($ch, $options);

}

//https请求 不验证证书和host

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

$data = curl_exec($ch);

curl_close($ch);

return $data;

}

}

一键复制

编辑

Web IDE

原始数据

按行查看

历史

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值