PHP实现的支付宝支付,退款,回调函数
发布时间:2018-09-11 14:14:31
来源:
1.支付宝主函数
<?php
include('alipay/aop/AopClient.php');
include('alipay/aop/request/AlipayTradeAppPayRequest.php');
include('alipay/aop/request/AlipayTradeRefundRequest.php');
//支付宝appid (应用标识)
define("ALIPAY_APPID", "");
//支付宝(支付宝私钥)
define("PRIVATE_KEY", "");
//支付宝(支付宝公钥)
define("PUBLIC_KEY", "");
class alipay{
/**
* 支付宝支付
*/
public function appAlipay(){
// 时间戳
$timeStamp = strval(time());
$totalFee = 1;
// 支付结果显示文字
$serial_number = date("Ymdhis") . mt_rand(10, 99);
$aop = new \AopClient();
$bizcontent = json_encode([
'body'=>"测试", //商品名称
'subject'=>'测试', //主题
'out_trade_no'=> $serial_number, //此订单号为商户唯一订单号
'total_amount'=> $totalFee, //保留两位小数
'product_code'=>'QUICK_MSECURITY_PAY'
]);
//支付宝开始
$aop->gatewayUrl = "https://openapi.alipay.com/gateway.do";
//实际上线app id需真实的
$aop->appId = ALIPAY_APPID;
$aop->rsaPrivateKey = PRIVATE_KEY;
$aop->format = "json";
$aop->charset = "UTF-8";
$aop->signType = "RSA2";
$aop->alipayrsaPublicKey = PUBLIC_KEY;
//实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
$request = new \AlipayTradeAppPayRequest();
//支付宝回调
$notifyUrl="https://openapi.alipay.com";
$request->setNotifyUrl($notifyUrl);
$request->setBizContent($bizcontent);
//这里和普通的接口调用不同,使用的是sdkExecute
$response = $aop->sdkExecute($request);
$this->echoSuccess($response);
}
/**
* 支付宝支付回调
*
*/
public function alipayNotify() {
if(!empty($_POST)){
$serial=$_POST['out_trade_no'];
$wepay_serial = $_POST['trade_no'];
if (!empty($wepay_serial)) {
//这里可以写自己需求
echo "返回的参数out_trade_no:".$serial;
echo "返回的参数trade_no:".$wepay_serial;
}
}
echo 'success';
}
/**
* 支付宝退货处理
* 退货前提是必须支付成功
* @param type $orderId
* @return bool
*/
public function alipayRefund($out_trade_no,$wepay_serial,$totalFee) {
$aop = new AopClient ();
$aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do';
$aop->appId = ALIPAY_APPID;
$aop->rsaPrivateKey = PRIVATE_KEY;
$aop->alipayrsaPublicKey=PUBLIC_KEY;
$aop->apiVersion = '1.0';
$aop->signType = 'RSA2';
$aop->postCharset='GBK';
$aop->format='json';
$request = new AlipayTradeRefundRequest ();
$bizcontent = json_encode([
'out_trade_no'=>$out_trade_no,
'trade_no'=> $wepay_serial,
'refund_amount'=> $totalFee,
'refund_reason'=>'正常退款'
]);
$request->setBizContent($bizcontent);
$result = $aop->execute($request);
$responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";
$resultCode = $result->$responseNode->code;
echo $resultCode;
if(!empty($resultCode)&&$resultCode == 10000){
echo "退款成功";
} else {
echo "退款失败";
}
}
/**
* 输出成功JSON消息
*/
final public function echoSuccess($msg = 'success') {
$this->echoMsg(0, $msg);
exit();
}
/**
* 输出JSON消息
* @param mixed $code
* @param mixed $msg
*/
final public function echoMsg($code, $msg = '', $options = JSON_UNESCAPED_UNICODE) {
return $this->echoJson(array(
'ret_code' => $code,
'ret_msg' => $msg
), $options);
}
/**
* 输出JSON
* @param mixed $arr
*/
final public function echoJson($arr, $options = JSON_UNESCAPED_UNICODE) {
header('Content-Type: application/json; charset=utf-8');
if (strpos(PHP_VERSION, '5.3') > -1) {
// php 5.3-
echo json_encode($arr);
} else {
// php 5.4+
echo json_encode($arr, $options);
}
return true;
}
}
2.调用 生成支付,退款 接口
<?php
include('./alipay.php');
$alipay =new alipay();
$alipay->appAlipay(); //支付函数
$out_trade_no=""; //订单号
$wepay_serial=""; //唯一订单号
$totalFee="0.01"; //退款金额
$alipay->alipayRefund($out_trade_no, $wepay_serial, $totalFee);//退款
源码下载
/uploadfile/2018/0911/20180911021601336.rar