客户端调试 链接在这里https://alipaybbs.oss-cn-hangzhou.aliyuncs.com/1807/thread/60_191_eb31b639a0caf31.zip
支付宝扫码登录
填写注册信息
沙箱工具页面
点击沙箱
安卓手机打开支付宝扫码下载安装
输入网址下载密匙生成工具软件
密钥工具下载 | 第三方应用支付宝文档中心https://opendocs.alipay.com/isv/02kipk
安装对应版本的
安装软件
粘贴然后保存
收集必要信息
2021000122603716 https://openapi.alipaydev.com/gateway.do 卖家 ctxjgr9930@sandbox.com 111111 买家 dpamsl4700@sandbox.com 111111
给卖家买家点余额
然后熟练的打开我们的idea
创建springboot项目 ,导入sdk jar包依赖
<!-- https://mvnrepository.com/artifact/com.alipay.sdk/alipay-sdk-java -->
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>4.10.111.ALL</version>
</dependency>
然后创建controller,复制代码
注意要看代码里的注解,把APPID、支付宝公钥、应用私钥换成你自己的
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.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
@RestController
@RequestMapping("/pay/ali")
public class AliPayController {
//!!!!!注意这里是你的APPID沙箱里查看
//应用id
private final static String APP_ID="2021000122603716";
//!!!!!注意这里是你的应用私钥,在支付宝开发平台助手里(就是刚才生成的私钥)
//应用私钥
private final static String APP_PRIVATE_KEY="MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCJObYRFQoHOIeeQCsrhWF5K7TeeQlB86jDd2bAV7g8XgVe2TXXqoDi/Q+085PdPzLYMmOj1JgZ1fIozW1P/jQJoJ9ia1QN+5iUWLM1ooadAfUqJE4Ird/3m/qiNFUYF1Prx/y3VXwm21Tay5Ln8ymq6IY6Yk1i8xMXFFeZtnYttBF+cZJg+rdH797PeQgB3C2BTAjJLo9h+81eQb6Bl+H8c9hkLBcsNDKt03AWXxHsFnGZZ4QMSFYKc6vNgITNXeLaQrhly4VKDd5aN2RI5b/KuyLoQkQtlb/azQHuTVwg9luUKCH+bg3cZ0Ay5FJeUXfxWL0k/9mmSh6cEg9+85vnAgMBAAECggEAWIuUn5Ej12TynXpqYLrAGp/JJYSUJKpEy1vQQWxYxRsl+/3McEzkvZLs/6XsU2bkN/zLrnsPahxTFWD4mBU/Hrc2IRuAMUWXPqG9gW5NziHlQDwM3izTx8IuB1wdTF5BGHMC7omKgsgkCMozENgmmtFPS30C0kZmmw3VOKozt2j0aGDiIdyLTNKfCDskM3t9WbKwaGjQfzpyC8/LQ9txePdC+pyB9lG4zzhf9zImSSPtO4lW3hV/QvD31UEPLRBYEA6KkSmHaXersTJn+WGzp8qI6JEdwrhYkve8xZAJv8bFHxdz8PWAc0uh2+re+ZuARS6p0ste9Yw/g3ltF2uxAQKBgQDdQsw9kDXu+KWnn99u4uwYGVA6FEC9+LH9YR5mDJl/eNPsKFM6jBGVXjAh/l53dFIztDju29wRp9GTAjOCP2OhlIfhYlmEW+xptUEPa44QNPjX1qW6BnLv0XjrfrQhzvTNEhoCBA5/fc1f+Z7FRelDsPvFJOTX9cLqsHVF2HuETwKBgQCexUBXBtMJuundhmvm6E+VCShmB/qMsGn2Tq7H0s9gKa+jexl86T3vJtpThT9JbMJ1sIwidmCo+KrYid3imi9NkjV/Kd+xlYJ6TjABG0YsFsl05LRs+ZMyw8gHusfrFxy+nJ2OQA4WsdPESE4CRLSRCe87mX/seMQYzST4CnjQ6QKBgQC5dQfkgj/ysg+H1QVe2G20NWN9iwRJN29ZRlJIjz8KDaj0RUidxlHmtS/7Dk74KVPNar5d14M6eUO8yReLkL5d7TWHwPvvaW1bnUWPO0O0afI6V/xJVKZ6RUXpfiZWQDYIvad3ERdl3XiLfZuLFvJSfsJJmIcITUK3nHhvtuixGQKBgDfK7R8n4MVMj54u/H/6Ju0ieLXSG/OQksvhPn4t0H3kaDo0qfJBLGh76MDs1B6DP5qH3dbGbpUyPSc222gj8nd55562IkuPVHiSPUBGS1R29XhEXjrlQRrXvdUph9NPHeTFuIAidlD3UIlrNy6I4kMNkKoK+O8qSQ7GGDWpyGbxAoGAPB0s2B2wJqBA7/dWv1wOby9WjOreaO28+bPGBGfjd0ZD52OFlc3Wh+3HGg9GUpCamwL3BDlenrVOZDKD6xNCTLEI7hGwCg7RONpXsVpA5z7XAnPVFGT2lwJXyO1SIuWDn2d3bfLnVgKY1Xshi+AIv4Jqp39jV5WiATaBofF4JYY=";
//字符集
private final static String CHARSET="UTF-8";
//!!!!!注意这里是你的支付宝公钥,在沙箱环境中RSA2(SHA256)密钥 弹窗里面的,支付宝公钥
//支付宝公钥
private final static String ALIPAY_PUBLIC_KEY="MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlBdnMKz/vgrUiru9IZf7hcou+1QkB6F22374bTSjGIBU02pcl6bZZKyf2nWa4TkV85JaXB8M2+oX9R1aCjvfnfEv1wOSxT1N7syTAWLSf6QfiIjAMvRlch64nIl/1WMTnAPkOa9DtJIvWROoEeaZiPdu4vlvo+Yv2Ehbuylhk4ic+JtRX3loYzu3fEuE7Q4x+U9pdUXrTfJJd0Xi5QxikxJulCDvFjKXdLPgYG5KukxBV2aH9lffRQfiW5VpRCHbKAyIe8pg4qGHQmWDb8ZNRBFoCIHOhiE/rRowyyLS1RJT8seyt/7cQ5Au/b3wk8Du05CaQtSylKMIglcebdzT8QIDAQAB";
//!!!!!注意这里是你的支付宝网关,在沙箱环境里查看
//网关
private final static String GATEWAY_URL="https://openapi.alipaydev.com/gateway.do";
//格式化
private final static String FORMAT="json";
//签名类型
private final static String SIGNTYPE="RSA2";
/*
* 获取订单信息
* */
@GetMapping("getOrderInfo")
public String getOrderInfo() {
//实例化客户端
AlipayClient alipayClient = new DefaultAlipayClient(GATEWAY_URL, APP_ID, APP_PRIVATE_KEY, FORMAT, CHARSET, ALIPAY_PUBLIC_KEY, SIGNTYPE);
//实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
//SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。
AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
model.setBody("我是测试数据");
model.setSubject("App支付测试Java");
model.setOutTradeNo("这里是交易订单号");
model.setTimeoutExpress("30m");
model.setTotalAmount("0.01");
model.setProductCode("QUICK_MSECURITY_PAY");
request.setBizModel(model);
request.setNotifyUrl("商户外网可以访问的异步地址");
try {
//这里和普通的接口调用不同,使用的是sdkExecute
AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request);
System.out.println(response.getBody());//就是orderString 可以直接给客户端请求,无需再做处理。
return response.getBody();
} catch (AlipayApiException e) {
e.printStackTrace();
}
return null;
}
@PostMapping("/notify_url")
public String notify_url(HttpServletRequest request){
//获取支付宝POST过来反馈信息
Map<String,String> params = new HashMap<String,String>();
Map requestParams = request.getParameterMap();
for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) {
String name = (String) iter.next();
String[] values = (String[]) requestParams.get(name);
String valueStr = "";
for (int i = 0; i < values.length; i++) {
valueStr = (i == values.length - 1) ? valueStr + values[i]
: valueStr + values[i] + ",";
}
//乱码解决,这段代码在出现乱码时使用。
//valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");
params.put(name, valueStr);
}
//切记alipaypublickey是支付宝的公钥,请去open.alipay.com对应应用下查看。
//boolean AlipaySignature.rsaCheckV1(Map<String, String> params, String publicKey, String charset, String sign_type)
try {
boolean flag = AlipaySignature.rsaCheckV1(params, ALIPAY_PUBLIC_KEY, CHARSET,SIGNTYPE);
//如果验签失败
if(!flag){
return "fail";
}
//验签成功后
//商户的业务逻辑 比如修改订单号
System.out.println("修改订单成功");
} catch (AlipayApiException e) {
e.printStackTrace();
}
return "success";
}
//这里是main方法用来生成alipay_sdk信息
public static void main(String[] args) {
AliPayController aliPayController = new AliPayController();
aliPayController.getOrderInfo();
}
}
7.然后运行main方法得到订单信息
打开手机沙箱环境登录
登录账号密码在沙箱工具中查看
如果没有余额可以充值
登录使用买家账号(用你自己的!!!)
登录后打开客户端工具
把生成的订单信息复制上去,选择沙支付宝箱支付
支付时输入的支付密码是111111