前端
fuqian(){
let vm=this;
// // 请求支付
uni.request({
url: 'http://????:8080/demo/pay',
method: 'post',
data:{
money:'0.01',
},
success(r) {
console.log("res---",r)
uni.requestPayment({
provider: 'alipay',
orderInfo: r.data, //微信、支付宝订单数据
success: function (re) {
console.log("支付回调",re)
vm.jin();
},
fail: function (err) {
console.log('fail:' , err);
}
});
}
});
},
接口
package com.demo.zhifu;
import java.util.Date;
import java.util.Map;
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;
/**
* @Author: zml
* @Description: 支付宝支付
* @CreateDate: 2020/1/14
* @UpdateDate: 2020/1/14
* @UpdateRemark: 修改内容
* @Version: 1.0
*/
public class AliPayTool {
// https://openapi.alipay.com/gateway.do
private static final String URL = "https://openapi.alipay.com/gateway.do"; //支付宝网关(固定)
private static final String APP_ID = "???";
private static final String PRIVATE_KEY = "???";
private static final String FORMAT = "json"; // 参数返回格式,只支持 json
private static final String CHARSET = "UTF-8"; // 编码集,支持 GBK/UTF-8
private static final String PUBLIC_KEY = "???";
private static final String SIGN_TYPE = "RSA2"; // 商户生成签名字符串所使用的签名算法类型,目前支持 RSA2 和 RSA,推荐使用 RSA2
private static final String ALI_PUBLIC_KEY = "???";
private static AlipayClient alipayClient;
private AliPayTool() {
alipayClient = new DefaultAlipayClient(URL, APP_ID, PRIVATE_KEY, FORMAT, CHARSET, PUBLIC_KEY, SIGN_TYPE);
}
private static AlipayClient getInstance() {
if (alipayClient == null) {
new AliPayTool();
}
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 = new Date().getTime() + "1";
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://?????:8080/demo/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 "aa";
}
}
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, ALI_PUBLIC_KEY, CHARSET,SIGN_TYPE);
}
// 提现
}
package com.demo.zhifu;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import com.alipay.api.AlipayApiException;
/**
* @Author: zml
* @Description: 描述
* @CreateDate: 2020/1/12
* @UpdateDate: 2020/1/12
* @UpdateRemark: 修改内容
* @Version: 1.0
*/
@RestController
@RequestMapping("demo")
@CrossOrigin(origins = "*")
public class DemoController {
@Autowired
ToolService toolService;
@GetMapping("test")
public String test() {
return "hello world";
}
@PostMapping("upload")
public String addGoods(@RequestParam(value = "files", required = false) MultipartFile files) {
try {
return toolService.upLoad(files);
} catch (Exception e) {
e.printStackTrace();
return "";
}
}
@PostMapping("pay")
@CrossOrigin
public String pay(@RequestBody PayParam param) {
try {
return toolService.pay(param.getMoney());
} catch (AlipayApiException e) {
e.printStackTrace();
return e.getErrMsg();
}
}
/**
* 支付宝支付成功后.异步请求该接口
*
* @param request
* @return
*/
@PostMapping("notify_url")
@ResponseBody
public void notify(HttpServletRequest request) {
try {
System.out.println("支付回调结果:" + toolService.check(request));
} catch (AlipayApiException e) {
e.printStackTrace();
}
}
}
package com.demo.zhifu;
public class PayParam {
String money;
String subject;
String body;
public String getMoney() {
return money;
}
public void setMoney(String money) {
this.money = money;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
}
package com.demo.zhifu;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import com.alipay.api.AlipayApiException;
import com.demo.index.QQCOSTool1;
/**
* @Author: zml
* @Description: 描述
* @CreateDate: 2020/1/13
* @UpdateDate: 2020/1/13
* @UpdateRemark: 修改内容
* @Version: 1.0
*/
@Service
public class ToolService {
// 腾讯云上传图片
public String upLoad(MultipartFile file) throws Exception {
return QQCOSTool1.uploadPictureByFile(file);
}
public String pay(String money) throws AlipayApiException {
String subject = "充值校园兼职";
String body = "校园兼职余额";
System.out.println(money);
return AliPayTool.pay(money,subject,body);
}
/**
* 把request请求参数转换为Map<String,String>
* @param request 该请求
* @return Map<String,String>格式的参数
*/
public static Map<String,String> request2Map(HttpServletRequest request){
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));
}
return resData;
}
public boolean check(HttpServletRequest request) throws AlipayApiException {
//获取支付宝POST过来反馈信息
Map<String,String> params = request2Map(request);
return AliPayTool.check(params);
}
}