**

java对接支付宝实现支付功能

**

Controller

/*** 支付功能* @return*/
@RequestMapping("/test")
public ModelAndView test(){ModelAndView mv = new ModelAndView("test");return mv;
}/*** 支付宝回调* @param request* @return* @throws UnsupportedEncodingException* @throws AlipayApiException*/
@RequestMapping("/paySuccess")
@ResponseBody
public SuccessRequest paySuccess(HttpServletRequest request) throws UnsupportedEncodingException, AlipayApiException {SuccessRequest payQuery = new SuccessRequest();Map<String,String> map = new HashMap<>();map = PayUtil.paySuccess(request);if(map!=null){redisUtil.setStrKV("xxxx",1);payQuery.setId(0);payQuery.setKeyword("成功");}return payQuery;
}/*** 支付宝验签* @param oid* @param oname* @param money* @param desc* @param model* @return* @throws AlipayApiException*/
@RequestMapping("/pay")
@ResponseBody
public SuccessRequest pay(String oid,String oname,String money,String desc,Model model) throws AlipayApiException {SuccessRequest payQuery = new SuccessRequest();payQuery = PayUtil.payQuery(oid);if(payQuery.getId().equals(0)){payQuery = PayUtil.pay(oid,oname,money,desc);}else if(payQuery.getId().equals(2)){redisUtil.setStrKV("xxxx",1);}System.out.println(payQuery);return payQuery;}

Entity

@Data
@AllArgsConstructor
@NoArgsConstructor
public class SuccessRequest implements Serializable {
private Integer id;
private String keyword;
private String callback;
}

支付util

我的这个付款验签需要用的是应用公钥、查询支付信息用的是支付宝公钥验签(不明白为什么,如果不这样就会报验签错误)

//网关
final static String serverUrl = “https://openapi.alipaydev.com/gateway.do”;
//appid
final static String appId = “”;
//私钥
final static String privateKey = “”;
//支付宝公钥
final static String ali_key="";
//应用公钥
final static String ali_keyyingyong = “”;
final static String signType = “RSA2”;

/*** 付款** @param oid* @param oname* @param money* @param desc* @return* @throws AlipayApiException*/
public static SuccessRequest pay(String oid, String oname, String money, String desc) throws AlipayApiException {AlipayClient alipayClient = new DefaultAlipayClient(serverUrl,appId,privateKey,format,charset,ali_keyyingyong,signType);AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();request.setNotifyUrl("http://工程公网访问地址/alipay.trade.page.pay-JAVA-UTF-8/notify_url.jsp");//returnUrlrequest.setReturnUrl("http://localhost:1234/paySuccess");JSONObject bizContent = new JSONObject();//商品信息//商品idbizContent.put("out_trade_no", oid);//价格bizContent.put("total_amount", money);//名称bizContent.put("subject", oname);//备注bizContent.put("product_code", "FAST_INSTANT_TRADE_PAY");request.setBizContent(bizContent.toString());AlipayTradePagePayResponse response = alipayClient.sdkExecute(request);//3、请求支付宝进行付款,并获取支付结果String result = alipayClient.pageExecute(request).getBody();System.out.println(result);SuccessRequest successRequest = new SuccessRequest();if (response.isSuccess()) {successRequest.setId(0);successRequest.setKeyword("调用成功");successRequest.setCallback(result);} else {System.out.println("调用失败");successRequest.setId(1);successRequest.setKeyword("调用失败");}return successRequest;
}/*** 查询是否支付* @param oid* @return* @throws AlipayApiException*/
public static SuccessRequest payQuery(String oid) throws AlipayApiException {AlipayClient alipayClient = new DefaultAlipayClient(serverUrl,appId,privateKey,format,charset,ali_key,signType);SuccessRequest successRequest = new SuccessRequest();AlipayTradeQueryRequest alipayRequest = new AlipayTradeQueryRequest();//商户订单号,商户网站订单系统中唯一订单号String out_trade_no = oid;alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\"}");AlipayTradeQueryResponse response = alipayClient.execute(alipayRequest);String tradeStatus = response.getTradeStatus();if(tradeStatus!=null&&tradeStatus.equals("TRADE_SUCCESS")){successRequest.setId(2);successRequest.setKeyword("用户已支付");System.out.println("用户已支付");}else{successRequest.setId(0);successRequest.setKeyword("用户未支付");System.out.println("用户未支付");}return successRequest;
}/*** 支付成功回调* @param request* @return* @throws AlipayApiException*/
public static Map<String,String> paySuccess(HttpServletRequest request) throws AlipayApiException {//获取支付成功订单id,获取成功的状态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] + ",";}params.put(name, valueStr);}SuccessRequest successRequest = new SuccessRequest();String out_trade_no = params.get("out_trade_no");String trade_no = params.get("trade_no");String total_amount = params.get("total_amount");System.out.println("out_trade_no==="+out_trade_no);System.out.println("trade_no==="+trade_no);System.out.println("total_amount==="+total_amount);successRequest.setId(0);successRequest.setKeyword("验签成功");return params;
}

填写支付信息页面

订单id<input type="text" name = "oid" id = "oid"/>
订单名称<input type="text" name = "oname" id = "oname"/>
付款金额<input type="text" name = "money" id = "money"/>
描述<input type="text" name = "desc" id = "desc"/>
<input type="button" value="付款" onclick="pay()">

脚本

function pay() {var oid = $("#oid").val();var oname = $("#oname").val();var money = $("#money").val();var desc = $("#desc").val();$.post("pay",{oid:oid,oname:oname,money:money,desc:desc},function (data) {console.info(data);if(data.id==0){$("#div").append(data.callback);}else if(data.id==1){$("#div").append("验签失败");console.info("验签失败");}else if(data.id==2){$("#div").append("用户已支付");console.info("用户已支付");}});
}

备注

该代码属于沙箱环境下完成测试,改为正式的支付,只需把网关换成https://openapi.alipay.com/gateway.do

java对接支付宝实现支付功能相关推荐

  1. JAVA对接支付宝支付(超详细,一看就懂)

    Java对接支付宝支付 更多内容 冷文博客: 传送门 引入 为什么要发这篇帖子呢?原因很简单,就是因为在一个稍稍正规一点的应用上都会有支付这个环节,我们日常的在线支付如今包括支付宝,微信钱包,QQ钱包 ...

  2. java对接支付宝当面付支付和查询

    最近看到很多人想用java写支付宝的收款功能用来做网站支付, 个人感觉网站支付的话支付宝的当面付功能算是有简单又实用的 当面付功能只需要实现他的两个接口就可以完成网站的支付和结果校验 1.支付宝的预创 ...

  3. java对接支付宝支付

    java对接支付宝支付演示 现在有不少的项目都需要对接支付,这里主要是进行讲解对接支付宝H5支付 废话不多说 上代码 引入支付宝官方的sdk <!-- https://mvnrepository ...

  4. java SpringBoot 对接支付宝 APP支付 证书模式及非证书模式

    一. 添加maven依赖 sdk <dependency><groupId>com.alipay.sdk</groupId><artifactId>al ...

  5. Springboot实现支付宝沙箱支付功能

    我们在做开发时很多时候会涉及到支付功能,常见会对接支付宝和微信支付,本文将对JAVA对接支付宝进行详细的讲解. 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳 ...

  6. Android接入支付宝实现支付功能

    Android接入支付宝实现支付功能 我本来是想直接讲Android支付这一块的,包括支付宝,微信,其他第三方整合支付等,但是微信开放平台他对我的账号做了限制,所有我今天就先把重心放在支付宝的支付上, ...

  7. java实现支付宝接口---支付

    java实现实现支付宝接口 蚂蚁沙箱环境 (Beta) 是协助开发者进行接口功能开发及主要功能联调的辅助环境.可以模拟实现支付宝的支付功能. 接下的实现技术是运用到springmvc注解方法实现的支付 ...

  8. 关于JAVA对接支付宝开发文档错误总结

    如果在对接支付宝官方文档时出现该错误,解决的方法是:检查是否与支付宝进行签约,如果签约后出现以下错误: 解决方法是检查支付宝的公钥与私钥是否与商户id对应,对于java对接支付宝,生成的密钥密钥长度为 ...

  9. php tp 支付宝 支付,php实现的支付宝网页支付功能示例【基于TP5框架】

    本文实例讲述了php实现的支付宝网页支付功能.分享给大家供大家参考,具体如下: 1.提交支付请求 require_once './payment/zfb/pagepay/service/AlipayT ...

最新文章

  1. 静态时序分析的约束命令
  2. [译]通过wp-config来定制你的WordPress
  3. Jsoup抓取网页数据完成一个简易的Android新闻APP
  4. (转贴) C#编码标准--编码习惯
  5. 江苏省有JAVA技能大赛,江苏省职业学校技能大赛组委会
  6. Linux系统编程17:进程控制之进程等待为什么进程需要被等待wait方法和waitpid方法阻塞和非阻塞等待
  7. 吴恩达CNN卷积神经网络第二周作业Keras Tutorial
  8. 《Linux编程》课堂测验 ·002【Shell编程】
  9. Lintcode: Implement Queue by Stacks 解题报告
  10. 机器学习sklearn中决策树模型参数释义
  11. paip.指针 引用 c++ java的使用总结.
  12. dubbo 自定义filter
  13. 静态GPS控制测量使用技术方法
  14. 简单快捷 Lambda数组打印
  15. 有效值(RMS) 平均值(DC) 的理解
  16. 如何将虚拟机上的文件复制到主机上
  17. 估值3000亿,中国最神秘电商公司,征服美国年轻人
  18. 查看CAD图纸文件时如何平移查看?
  19. Python数据挖掘-OneR算法简介
  20. 利用python实现简单的人工神经网络识别手写数字

热门文章

  1. MySQL数据库——数据查询(三)
  2. 报告称中国黑客组织APT10发动全球规模最大的网络间谍活动
  3. [基础]PHP Web数据库访问编写简单示例——图书售卖系统示例[2/2]
  4. 认知都因为从小的生活环境和成长经历的局限而被局限
  5. 自举电路的学习(二)——设计选型
  6. python加密解密 sha256_如何在python上使用RSA私钥和SHA256解密
  7. ai文章检测软件(检测文章原创性的软件)
  8. 商品防伪——你需要一次性二维码!
  9. 哄好自己的及时行乐猴
  10. 以程序员的名义,分析 “人民的名义”