java app调用支付宝支付
沙箱环境
1:先去蚂蚁金服入驻
得到开发需要的信息 appid 支付宝网管 商户私钥和支付宝公钥
2:配置参数类
pom引入jar包
<dependency><groupId>com.alipay.sdk</groupId><artifactId>alipay-sdk-java</artifactId><version>3.1.0</version></dependency>
配置支付宝需要的参数配置
package com.fandemi.utils.alipay;public class AlipayConfig {// 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号public static String app_id = "appid";// 支付宝网关public static String url = "https://openapi.alipaydev.com/gateway.do";// 商户私钥,您的PKCS8格式RSA2私钥public static String private_key = "";// 支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。public static String public_key = "";// 服务器异步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问public static String notify_url = "";// 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问public static String return_url = "";// 签名方式public static String sign_type = "RSA2";// 签名方式public static String format = "json";//参数格式为json// 字符编码格式public static String charset = "utf-8";}
3:配置参数实体类
package com.fandemi.utils.alipay;public class AlipayBean {/*** 商户订单号,必填**/private String out_trade_no;/*** 订单名称,必填*/private String subject;/*** 付款金额,必填* 根据支付宝接口协议,必须使用下划线*/private String total_amount;/*** 商品描述,可空*/private String body;/*** 超时时间参数*/private String timeout_express= "10m";/*** 产品编号*/private String product_code= "FAST_INSTANT_TRADE_PAY";public String getOut_trade_no() {return out_trade_no;}public void setOut_trade_no(String out_trade_no) {this.out_trade_no = out_trade_no;}public String getSubject() {return subject;}public void setSubject(String subject) {this.subject = subject;}public String getTotal_amount() {return total_amount;}public void setTotal_amount(String total_amount) {this.total_amount = total_amount;}public String getBody() {return body;}public void setBody(String body) {this.body = body;}public String getTimeout_express() {return timeout_express;}public void setTimeout_express(String timeout_express) {this.timeout_express = timeout_express;}public String getProduct_code() {return product_code;}public void setProduct_code(String product_code) {this.product_code = product_code;}
}
4:编写支付业务代码service实现类
/*** 支付宝支付接口* @param orderNo 订单号* @param payMoney 支付金额* @return*/@Overridepublic String pay(AlipayBean alipayBean) {try {AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.url,//支付宝网管AlipayConfig.app_id,//appidAlipayConfig.private_key,//私钥AlipayConfig.format,//json格式AlipayConfig.charset,//编码格式AlipayConfig.public_key,//公钥AlipayConfig.sign_type);//签名方式AlipayTradeAppPayRequest appPayRequest = new AlipayTradeAppPayRequest();AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();model.setBody("我是测试数据");model.setSubject("App支付测试Java");//请保证OutTradeNo值每次保证唯一model.setOutTradeNo(alipayBean.getOut_trade_no());//订单号model.setTimeoutExpress("30m");//超时时间 自定义model.setTotalAmount(alipayBean.getTotal_amount());//前台传的支付金额 string类型model.setProductCode("QUICK_MSECURITY_PAY");//写死appPayRequest.setBizModel(model);appPayRequest.setNotifyUrl(AlipayConfig.notify_url);//回调地址//这里和普通的接口调用不同,使用的是sdkExecuteAlipayTradeAppPayResponse response = alipayClient.sdkExecute(appPayRequest);System.out.println(response.getBody());//就是orderString 可以直接给客户端请求,无需再做处理。return response.getBody();} catch (AlipayApiException e) {e.printStackTrace();String msg = e.getMessage();return msg;}}
5:回调方法
/*** 米币商城回调地址(学员端)* @param request* @param response* @return* @throws IOException*/@PostMapping("/notifyMibiMall01")public void notifyMibiMall01(HttpServletRequest request, HttpServletResponse response) throws IOException{logger.info("米币商城学员端支付宝异步回调开始==============");//1:从支付宝异步回调中取值BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream());Map<String,String[]> aliParams = request.getParameterMap();//用于存放转化后的参数集合Map<String,String> conversionParams = new HashMap<>();for (Iterator<String> iter = aliParams.keySet().iterator();iter.hasNext();){String key = iter.next();String[] values = aliParams.get(key);String valueStr="";for (int i=0;i<values.length;i++){valueStr = (i==values.length-1)?valueStr+values[i]:valueStr+values[i]+",";}// 乱码解决,这段代码在出现乱码时使用。如果mysign和sign不相等也可以使用这段代码转化// valueStr = new String(valueStr.getBytes("ISO-8859-1"), "uft-8");conversionParams.put(key, valueStr);}logger.info("返回参数的集合conversionParams=="+conversionParams);String status = alipayService.notifyMibiMall01(conversionParams);if (status.equals("success")){out.write("success".getBytes());}else {out.write("fail".getBytes());}out.flush();out.close();}
/*** 米币商城回调地址(学员端)* @param conversionParams* @return*/@Overridepublic String notifyMibiMall01(Map<String, String> conversionParams) {logger.info("支付宝异步请求处理逻辑==============");boolean signVerified = false;//签名验证(对支付宝返回的数据验证,确定是支付宝返回的)try {//调用SDK验证签名signVerified = AlipaySignature.rsaCheckV1(conversionParams,AlipayConfig.public_key,AlipayConfig.charset,AlipayConfig.sign_type);} catch (AlipayApiException e) {logger.info("验签失败====================");e.printStackTrace();}String userId ="";Map<String,String> extrasMap = new HashMap<>();//对延签进行处理if (signVerified){logger.info("验签通过==============");//获取需要保存的数据String addId = conversionParams.get("app_id");//支付宝分配给开发者的应用idString notifyTime = conversionParams.get("notify_time");//通知时间 yyyy-mm-dd hh:mm:ssString gmtCreate = conversionParams.get("gmt_create");//交易创建时间// String gmtRefund = conversionParams.get("gmt_refund");// 交易退款时间//String gmtClose = conversionParams.get("gmt_close");// 交易结束时间String tradeNo = conversionParams.get("trade_no");// 支付宝的交易号String outTradeNo = conversionParams.get("out_trade_no");// 获取商户之前传给支付宝的订单号(商户系统的唯一订单号)//String outBizNo = conversionParams.get("out_biz_no");// 商户业务号(商户业务ID,主要是退款通知中返回退款申请的流水号)String buyerLogonId = conversionParams.get("buyer_logon_id");// 买家支付宝账号String buyerId = conversionParams.get("buyer_id"); //买家支付宝用户号(唯一)String sellerId = conversionParams.get("seller_id");// 卖家支付宝用户号String sellerEmail = conversionParams.get("seller_email");// 卖家支付宝账号String totalAmount = conversionParams.get("total_amount");// 订单金额:本次交易支付的订单金额,单位为人民币(元)String receiptAmount = conversionParams.get("receipt_amount");// 实收金额:商家在交易中实际收到的款项,单位为元//String invoiceAmount = conversionParams.get("invoice_amount");// 开票金额:用户在交易中支付的可开发票的金额String buyerPayAmount = conversionParams.get("buyer_pay_amount");// 付款金额:用户在交易中支付的金额String tradeStatus = conversionParams.get("trade_status");// 获取交易状态//判断交易结果if (tradeStatus.equals("TRADE_SUCCESS")){FanMibiOrder fanMibiOrder = new FanMibiOrder();fanMibiOrder.setOrderNo(outTradeNo);fanMibiOrder.setType(2);fanMibiOrderMapper.updateFanMibiOrder(fanMibiOrder);//修改订单状态为已完成fanMibiOrder = fanMibiOrderMapper.selectFanMibiOrderById(outTradeNo);Integer mibi = fanMibiOrder.getMibi()==null?0:fanMibiOrder.getMibi();userId=fanMibiOrder.getUserId();String companyId = fanMibiOrder.getCompanyId();//插入米币记录FanStuHave fanStuHave = new FanStuHave();fanStuHave.setId(CommonUtil.getUUID());fanStuHave.setMibi(-mibi);fanStuHave.setType(2);fanStuHave.setRemark("米币商城");fanStuHave.setCompanyId(companyId);fanStuHave.setCreateTime(new Date());fanStuHave.setStudentId(userId);fanStuHaveMapper.insertFanStuHave(fanStuHave);redisUtils.delete(Constants.REDIS_STUDENT_HAVE+userId+2);try {jpushStudentService.sendCustomPush("米币商城","付款成功",extrasMap,userId);} catch (APIConnectionException e) {e.printStackTrace();} catch (APIRequestException e) {e.printStackTrace();}return "success";}try {jpushStudentService.sendCustomPush("米币商城","付款失败",extrasMap,userId);} catch (APIConnectionException e) {e.printStackTrace();} catch (APIRequestException e) {e.printStackTrace();}return "fail";}try {jpushStudentService.sendCustomPush("米币商城","付款失败",extrasMap,userId);} catch (APIConnectionException e) {e.printStackTrace();} catch (APIRequestException e) {e.printStackTrace();}return "fail";}
返回的参数放入测试工具,可以调用沙箱环境支付宝支付,说明开发成功
下面是测试工具地址
https://alipaybbs.oss-cn-hangzhou.aliyuncs.com/1807/thread/60_191_eb31b639a0caf31.zip
java app调用支付宝支付相关推荐
- 手机APP调用支付宝支付(java服务端)
最近项目中涉及到调用支付宝支付接口,记录一下.拉进去配置一下直接可以用的 导包 <dependency><groupId>com.alipay.sdk</groupId& ...
- APP调用支付宝支付
申请支付宝支付,获取appid,开发者私钥,开发者公钥,支付宝公钥 下载支付宝sdk : https://docs.open.alipay.com/54/106370/ 核心代码,$setNotify ...
- java 中调用支付宝支付功能的接口
支付宝接口: 申请支付宝接口服务: 1.https://fuwu.alipay.com/platform/doc.htm#c11 Java-JDK 1.5 SDK 2.https://csha ...
- java后台实现支付宝支付接口、支付宝订单查询接口 前端为APP
最近项目APP需要接入微信.支付宝支付功能,在分配开发任务时,听说微信支付接口比支付宝支付接口要难实现,由于我开发经验不是那么丰富(现工作经验1年半)且未接触过支付接口开发,组里刚好又有支付接口的老司 ...
- APP调用支付宝客户端发起支付
话不多说,直接上核心代码!!! 另附RSA密钥生成工具地址: https://docs.open.alipay.com/291/105971/ /*** 调用支付宝支付*/private PayRes ...
- Springboot 服务端为App集成支付宝支付
别整什么花里胡哨的,先去吧官方文档看一遍. 首先把准备的东西准备好,这里加上一个大佬写的的连接:https://blog.csdn.net/vbirdbest/article/details/8063 ...
- APP接入支付宝支付功能
适用场景 在App内集成支付宝支付.APP调用支付宝提供的SDK,SDK再调用支付宝APP内的支付模块.如果用户已安装支付宝APP,商家APP会跳转到支付宝中完成支付,支付完后跳回到商家APP内.如果 ...
- Android如何调用支付宝支付 微信支付
1.支付宝支付-------------------------- 1,到支付宝官网,下载支付宝集成开发包,看懂里面的关键代码 由于android设备一般用的都是无线支付,所有我们申请的就是支付宝无线 ...
- php编程之如何调用支付宝支付接口的实现
对于任何一款软件来说,支付功能都是核心的,那么目前的主流支付接口主要是支付宝.微信和银联卡,而大多数开发技术人员对于如何调用支付宝的支付接口还存在很大的困扰,今天就来跟大家分享一下如何正确调用支付宝支 ...
最新文章
- 《强化学习周刊》第37期:视觉深层框架、Transformer World模型、注意力增强强化学习...
- java8中的Lamba表达式
- 2018.1.18纪事
- XeLaTeX插入GB/T 7714-2005规范的参考文献方法
- MINIGUI常见错误集及解决方法
- 图解尼科马修斯定理,你看懂了吗?
- liunx之Centos6.8杀毒软件的安装
- 如何化身BAT面试收割机?不吃透都对不起自己
- LeetCode 79. 单词搜索(回溯DFS)
- python包含多个元组的元组_Python数据结构(元组,列表,字典)
- 利用NSight进行交叉编译
- 组合数学练习题(二)——Chemist
- 触手直播停服,游戏主播们涌入快手
- 不使用手机代理,进行手机抓包
- 基于mybatis向oracle中插入数据的性能对比
- 编程珠玑Column11中插入排序和快排序
- 2.1 新版个人所得税计算
- DataV 你值得拥有的大屏展示工具
- 笔记本cpu天梯图2021最新版
- 来把三子棋吗?创建属于你的三子棋。