@File
2019-10-31T06:21:06.000000Z
字数 2972
阅读 279
java 第三方api



<dependency><groupId>com.alipay.sdk</groupId><artifactId>alipay-sdk-java</artifactId><version>3.0.0</version></dependency>
alipay:# 阿里网关(沙箱和正式网关不一样)gateway: https://openapi.alipaydev.com/gateway.do# 编码格式 UTF-8/GBKcharset: UTF-8# 签名规则 RSA/RSA2sign-type: RSA# 阿里公钥(后台获取)public-key: MIIBIjANBgkqhkiG9w***# 商户信息app-infor:# 支付成功回调验签接口(自定义的外网接口)notify-url: http://127.0.0.1:8800/PayNotify# appid(后台获取)id: 2016***# 商户私钥(后台获取)private-key: MIIEvgIBADANBgkqhkiG9w0BAQ***
@Componentpublic class AlipayUtil {/*** 数据格式(固定)*/private String format = "json";/*** 支付宝网关*/@Value("${alipay.gateway}")private String gateway;/*** appid*/@Value("${alipay.app-infor.id}")private String appId;/*** 应用私钥*/@Value("${alipay.app-infor.private-key}")private String appPrivateKey;/*** 编码格式*/@Value("${alipay.charset}")private String charset;/*** 支付宝公钥*/@Value("${alipay.public-key}")private String alipayPublicKey;/*** 签名类型*/@Value("${alipay.sign-type}")private String signType;/*** 回调地址*/@Value("${alipay.app-infor.notify-url}")private String notifyUrl;/*** 电脑网页支付* @param url 请求成功跳转页面地址* @param jsonConfig 配置json字符串* @return html字符串*/public String webPay(String url,String jsonConfig){//实例化客户端AlipayClient alipayClient = new DefaultAlipayClient(gateway, appId, appPrivateKey, format, charset, alipayPublicKey, signType);String form = "";AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();// 客户端跳转地址request.setReturnUrl(url);// 在公共参数中设置回跳和通知地址request.setNotifyUrl(notifyUrl);// 设置请求参数request.setBizContent(jsonConfig);try {// 调用SDK生成html表单,带js自动提交表单form = alipayClient.pageExecute(request).getBody();} catch (AlipayApiException e) {e.printStackTrace();}// 返回html表单字符串return form;}/*** 支付宝回调参数* @param paramsMap 回调参数* @param afterSuccess 成功执行的方法* @return 响应给支付宝的内容*/public String signature(Map<String, String> paramsMap, AfterSuccess afterSuccess){// 默认失败的响应内容String res = "failure";try {// 验签if(AlipaySignature.rsaCheckV1(paramsMap, alipayPublicKey, charset, signType)){// 成功响应前的业务逻辑afterSuccess.success(paramsMap);// 成功的响应内容res = "success";}} catch (AlipayApiException e) {e.printStackTrace();}return res;}/*** 验签成功辅助接口*/public interface AfterSuccess {/*** 成功执行的方法* @param params 支付宝传来的参数*/void success(Map<String, String> params);}}
public String pay(int oid) {// 通过数据库找到订单信息Order order = orderMapper.findById(oid);// 组合成jsonString json = "{"// 订单号必须唯一+ "\"out_trade_no\":\""+order.getOutTradeNo()+'"'+ ",\"product_code\":\"FAST_INSTANT_TRADE_PAY\""// 金额+ ",\"total_amount\":"+order.getPrice()// 标题+ ",\"subject\":\""+order.getSubject()+'"'+ "}";return alipayUtil.webPay("https://www.baidu.com/",json);}
// 验签接口@PostMapping(value = "/PayNotify")// 注意:支付宝传过来的参数是表单参数,不能用 @RequestBody 接收public String payNotify(@RequestParam Map<String,String> collBack){String signature = alipayUtil.signature(collBack, params -> {//验签成功执行的业务操作});// 给支付宝响应结果return signature;}

