接入支付宝沙箱环境
1:先登陆支付宝的沙箱环境
登陆地址:/platform/appDaily.htm看下里面的东西
2:点击左侧沙箱应用下拉看到下载钱包这个是登陆沙箱账号的一个app下载下来使用沙箱账号的买家账号登陆
3:配置沙箱测试账号的密钥:基本思路是先生成一对密钥对最好下载支付宝的工具生成选择
点击生成密钥就可以了。记得保存一会会用到。
点击查看应用公钥将生成的公钥放进去(我已经生成了所以回显示我截图这样的)。
这一块最好自己百度学下吧,不是很难。
下面上代码了:自己搭个spring boot的服务,保证能跑起来
引入这个架包
com.alipay.sdk
alipay-sdk-java
3.3.4.ALL
package com.business.bstool.docTodownIoad.controller;
import cn.hutool.core.io.FileUtil;
import cn.hutool.extra.qrcode.QrCodeUtil;
import com.alibaba.fastjson.JSONObject;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayTradePrecreateRequest;
import com.alipay.api.response.AlipayTradePrecreateResponse;
import lombok.SneakyThrows;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
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.ResponseBody;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;
/**
@author :zhaoxue_wei
@date :Created in /12/16 16:18
文件说明:
*/
@Controller
@RequestMapping("/ZhiFuBao")
public class ZhiFuController {
private static ThreadLocal requestThreadLocalHolder = new ThreadLocal();
public static String APP_ID = “沙箱环境里面去找”;
/**
公钥
/
public static String a = “你生成的密钥对”;
/*私钥
*/
public static String b =“你生成的密钥对”;
//私钥
public static String APP_PRIVATE_KEY = b;
public static String CHARSET = “UTF-8”;
//支付宝公钥=查看支付宝公钥中的数值
public static String ALIPAY_PUBLIC_KEY = “”;
@Autowired
private AmqpTemplate rabbitTemplate;
@SneakyThrows
@ResponseBody
@GetMapping("/demo")
public String payDemo() {
AlipayClient alipayClient = new DefaultAlipayClient(“/gateway.do”,
APP_ID, APP_PRIVATE_KEY, “json”, CHARSET, ALIPAY_PUBLIC_KEY, “RSA”); //获得初始化的AlipayClient
AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest(); //创建API对应的request类
Map<String,String> map = new HashMap();
map.put(“out_trade_no”,“0320010101016”);//商户订单号,需要保证商家系统不重复。
map.put(“total_amount”,“100”);// total_amount:订单金额。
map.put(“subject”,“Iphone6 16G”);// subject:商品的标题/交易标题/订单标题/订单关键字等。不可使用特殊字符,如 /,=,& 等。
map.put(“store_id”,“2088621955460628”);// store_id:商户门店编号。
map.put(“timeout_express”,“90m”);// timeout_express:交易超时时间
String str = JSONObject.toJSONString(map);request.setBizContent(str);request.setNotifyUrl("http://365w51z250.zicp.vip/ZhiFuBao/callback");AlipayTradePrecreateResponse response = alipayClient.execute(request);System.out.println(response.getBody());JSONObject jsonObject = JSONObject.parseObject(response.getBody());JSONObject body = JSONObject.parseObject(jsonObject.getString("alipay_trade_precreate_response"));//判断返回结果String qrcodde = body.getString("qr_code");QrCodeUtil.generate(qrcodde, 300, 300, FileUtil.file("D:/qrcode.jpg"));return "";
}
@PostMapping("/callback")
@ResponseBody
public String callback(HttpServletRequest request) {
System.out.println(“回调通知=”);
System.out.println(request.getParameter(“out_trade_no”));
System.out.println(request.getParameter(“trade_status”));
return "success";
}
}
这些就是全部的代码了(不要下载官方的demo去跑,老是提示你验签失败,这个代码还是比较新的)
坑1: request.setNotifyUrl(“http://365w51z250.zicp.vip/ZhiFuBao/callback”);
这个参数一定是放在request中不是setBizContent这样
坑2:回调地址是post请求,此地址必须支持外网可访问,
以上代码实现的是:请求demo地址会在d盘生成一个二维码,用沙箱买家账号扫这个二维码,付款成功后支付宝回调callback方法,自己的业务逻辑就写在这个callback里面了。有问题咨询15668316593,共同探讨。第一次写哈哈。