//前后端基本固定复制改个参数
前端
fuqian(){
let vm=this;
// // 请求支付
uni.request({
url: 'http://????:9091/Ceshizhifu/pay',
method: 'post',
data:{
"money":0.1,
"subject":"标题",
"body":"内容"
},
success(r) {
uni.requestPayment({
provider: 'alipay',
orderInfo: r.data, //微信、支付宝订单数据
success: function (re) {
console.log("支付回调",re)
vm.jin();
},
fail: function (err) {
console.log('fail:' , err);
}
});
}
});
},
后台接口:
接收类:
@Data
public class PayParam {
String money;//钱数
String subject;//标题
String body;//内容
}
yml配置
ali-zhifu:
# appId
APP_ID :
# 商户的私钥
APP_PRIVATE_KEY :
# 支付宝公钥
ALIPAY_PUBLIC_KEY :
# 编码
CHARSET : utf-8
# 支付宝网关
GATEWAY : https://openapi.alipaydev.com/gateway.do
# 参数返回格式,只支持 json
FORMAT: json
#商户生成签名字符串所使用的签名算法类型,目前支持 RSA2 和 RSA,推荐使用 RSA2
SIGN_TYPE: RSA2
工具类:
package Ceshi.utils.alizhifu;
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.domain.AlipayTradeAppPayModel;
import com.alipay.api.internal.util.AlipaySignature;
import com.alipay.api.request.AlipayTradeAppPayRequest;
import com.alipay.api.response.AlipayTradeAppPayResponse;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.util.Map;
/**
* @author 翎墨袅
* @version V1.0
* @Package Ceshi.utils.alizhifu
* @ClassName Alizhifu
* @Description 阿里支付
* @date 2020/7/28 14:49
**/
@Component
public class Alizhifu implements InitializingBean {
@Value("${ali-zhifu.APP_ID}")
private String appid;
@Value("${ali-zhifu.APP_PRIVATE_KEY}")
private String appprivatekey;
@Value("${ali-zhifu.ALIPAY_PUBLIC_KEY}")
private String alipaypublickey;
@Value("${ali-zhifu.CHARSET}")
private String charset;
@Value("${ali-zhifu.GATEWAY}")
private String gateway;
@Value("${ali-zhifu.FORMAT}")
private String format;
@Value("${ali-zhifu.SIGN_TYPE}")
private String signtype;
private static String APP_ID;
private static String APP_PRIVATE_KEY;
private static String ALIPAY_PUBLIC_KEY;
private static String CHARSET;
private static String GATEWAY;
private static String FORMAT;
private static String SIGN_TYPE;
/**
* 服务器启动的时候,ConstantPropertiesUtil初始化,调用里面的afterPropertiesSet方法,读取配置文件的内容
* @throws Exception
*/
@Override
public void afterPropertiesSet() throws Exception {
APP_ID = appid;
APP_PRIVATE_KEY = appprivatekey;
ALIPAY_PUBLIC_KEY = alipaypublickey;
CHARSET = charset;
GATEWAY = gateway;
FORMAT = format;
SIGN_TYPE = signtype;
}
private static AlipayClient alipayClient;
private Alizhifu() {
alipayClient = new DefaultAlipayClient(CHARSET, APP_ID, APP_PRIVATE_KEY, FORMAT, CHARSET,ALIPAY_PUBLIC_KEY , SIGN_TYPE);
}
private static AlipayClient getInstance() {
if (alipayClient == null) {
new Alizhifu();
}
return alipayClient;
}
/**
* out_trade_no String 订单编号
* product_code String 销售产品码,与支付宝签约的产品码名称。注:目前仅支持FAST_INSTANT_TRADE_PAY
* total_amount double 订单总金额,单位为元,精确到小数点后两位,取值范围[0.01,100000000]。
* subject String 订单标题
* body String 订单内容
* time_expire Date 超时时间,格式:yyyy-MM-dd HH:mm:ss1
* timeout_express String g格式:1m~15d。m-分钟,h-小时,d-天,1c-当天(1c-当天的情况下,无论交易何时创建,都在0点关闭)。
*/
public static String pay(String money,String subject,String body) throws AlipayApiException {
AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
// 时间戳+用户id
String orderCode = System.currentTimeMillis() + "dgzjil";
AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
model.setBody(body);
model.setSubject(subject);
// 创建一个订单编号
model.setOutTradeNo(orderCode);
model.setTimeoutExpress("15m");//十五分钟后失效
model.setTotalAmount(money);//金额
model.setProductCode("QUICK_MSECURITY_PAY");
request.setBizModel(model);
request.setNotifyUrl("http://39.106.76.233:9091/Ceshizhifu/notify_url");//通知地址
AlipayTradeAppPayResponse response = getInstance().sdkExecute(request);
if (response.isSuccess()) {
System.out.println(money);
System.out.println("调用成功");
return response.getBody();
} else {
System.out.println("调用失败");
return "调用失败";
}
}
public static boolean check(Map<String,String> params) throws AlipayApiException {
//这个接口是上面设置回调的自己不用调用
//切记alipaypublickey是支付宝的公钥,请去open.alipay.com对应应用下查看。
//boolean AlipaySignature.rsaCheckV1(Map<String, String> params, String publicKey, String charset, String sign_type)
return AlipaySignature.rsaCheckV1(params, ALIPAY_PUBLIC_KEY, CHARSET,SIGN_TYPE);
}
}
控制器
package Ceshi.Controller;
import Ceshi.param.PayParam;
import Ceshi.utils.Result;
import Ceshi.utils.alizhifu.Alizhifu;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
@RestController
@RequestMapping(value="Ceshizhifu")
public class CeshizhifuController {
@PostMapping("pay")
public Result pay(@RequestBody PayParam param) {
try {
System.out.println("支付结果:" + Alizhifu.pay(param.getMoney(),param.getSubject(),param.getBody()));
return Result.ok("data","成功");
} catch (Exception e) {
e.printStackTrace();
return Result.error("失败");
}
}
/**
* 支付宝支付成功后.异步请求该接口
*
* @param request
* @return
*/
@PostMapping("notify_url")
public void notify(HttpServletRequest request) {
try {
Enumeration<String> names = request.getParameterNames();
Map<String, String> resData = new HashMap<String, String>();
while (names.hasMoreElements()) {
String name = names.nextElement();
resData.put(name, request.getParameter(name));
}
Map<String,String> params = resData;
System.out.println("支付回调结果:" + Alizhifu.check(params));
} catch (Exception e) {
e.printStackTrace();
}
}
}
依赖
<!-- alipay -->
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>3.1.0</version>
</dependency>