php 微信-支付宝APP支付,退款参数获取

注意事项:

1、微信退款需要双向证书

2、微信金额 需要 乘以100 ,以分为单位。


<?php
class pays{
/**
* 获取微信App支付参数
* @param $userId 支付用户账号
* @param $taskId 支付订单号
* @param $out_trade_no 网站唯一订单号
* @param $total_fee 支付金额
* @return array 参数
*/
public function getPayAlipay($userId,$taskId,$out_trade_no,$total_fee){
//添加支付记录
pdo_insert("taskpaylog",array(
"account"=>$userId,
"taskId"=>$taskId,
"outTradeNo"=>$out_trade_no,
"payType"=>"alipay",//支付方式,Alipay 阿里,WeChat 微信
"createtime"=>time()
));
vendor('alipay.aop.AopClient');
vendor('alipay.aop.SignData');
vendor('alipay.aop.request.AlipayTradeAppPayRequest');
$aop = new \AopClient ();
$aop->gatewayUrl = "https://openapi.alipay.com/gateway.do";//"https://openapi.alipay.com/gateway.do"; https://openapi.alipaydev.com/gateway.do
$aop->appId = "***************************************";//“应用ID,填写你的APPID”;
$aop->rsaPrivateKey = "***************************************";//"商户私钥,您的原始格式RSA私钥()";
$aop->alipayrsaPublicKey = "***************************************";
$aop->apiVersion = '1.0';
$aop->signType = "RSA2";
$aop->postCharset = 'UTF-8';
$aop->format = "json";
$appRequest = new \AlipayTradeAppPayRequest();
$bizcontent = json_encode([
'body' => '测试支付', //订单描述
'subject' => '项目名称', //订单标题
'timeout_express' => '30m',//超时时间
'out_trade_no' => $out_trade_no, //商户网站唯一订单号
'total_amount' => "{$total_fee}", //订单总金额
'product_code' => 'QUICK_MSECURITY_PAY', //固定值
]);
$url = "http://{$_SERVER['HTTP_HOST']}/notify/aliPay.php";
$appRequest->setNotifyUrl($url); //设置异步通知地址
$appRequest->setBizContent($bizcontent);
$response = $aop->sdkExecute($appRequest);
return array("code"=>0,"result"=>$response);
//return htmlspecialchars($response);
}
/**
* 调用支付宝app支付退款
* @param $out_trade_no
* @param $refund_fee
* @return string
*/
public function tkAlipay($out_trade_no,$refund_fee){
vendor('alipay.aop.AopClient');
vendor('alipay.aop.SignData');
vendor('alipay.aop.request.AlipayTradeRefundRequest');
$aop = new \AopClient ();
$aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do';
$aop->appId = "***************************************";//“应用ID,填写你的APPID”;
$aop->rsaPrivateKey = "***************************************";//"商户私钥,您的原始格式RSA私钥()";
$aop->alipayrsaPublicKey = "***************************************";
$aop->apiVersion = '1.0';
$aop->signType = "RSA2";
$aop->postCharset = 'UTF-8';
$aop->format = "json";
$request = new \AlipayTradeRefundRequest ();
//"\"trade_no\":\"2014112611001004680073956707\"," . //支付宝交易号,和商户订单号不能同时为空 特殊可选
$request->setBizContent("{" .
"\"out_trade_no\":\"{$out_trade_no}\"," . //订单支付时传入的商户订单号,不能和 trade_no同时为空。 特殊可选
"\"refund_amount\":\"{$refund_fee}\"," . //需要退款的金额,该金额不能大于订单金额,单位为元,支持两位小数 必选
"\"refund_reason\":\"订单取消-退款\"" . //退款的原因说明 正常退款 可选 最后的“,”逗号去掉
"}");
$result = $aop->execute($request);
$responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";
$resultCode = $result->$responseNode->code;
if(!empty($resultCode) && $resultCode == 10000){
return "SUCCESS";
} else {
return "FAIL";
}
}
/**
* 获取支付宝App支付参数
* @param $userId 支付用户账号
* @param $taskId 支付订单号
* @param $out_trade_no 网站唯一订单号
* @param $total_fee 支付金额
* @return array 参数
*/
//获取微信支付参数
public function getPayWechat($userId,$taskId,$out_trade_no,$total_fee){
//添加支付记录
pdo_insert("taskpaylog",array(
"account"=>$userId,
"taskId"=>$taskId,
"outTradeNo"=>$out_trade_no,
"payType"=>"WeChat",//支付方式,Alipay 阿里,WeChat 微信
"createtime"=>time()
));
$key = '***************************************';//key为商户平台设置的密钥key
$appid = '***************************************';//应用ID
$mch_id = '***************************************';//商户号
$nonce_str = mt_rand(100000, 999999);//随机字符串
$body = '测试支付';//商品描述
$total_fee = $total_fee * 100;//总金额
$spbill_create_ip = $_SERVER['REMOTE_ADDR'];//终端IP
$out_trade_no = $out_trade_no;//商户系统内部订单号,要求32个字符内,只能是数字、大小写字母_-|*且在同一个商户号下唯一。详见商户订单号
$notify_url = 'http://'.$_SERVER['HTTP_HOST'].'/notify/wechatPay.php';//通知地址
$trade_type = 'APP';//交易类型
//https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_1
$stra = "app;
}
}
}