支付宝支付接口调用实现支付功能
支付宝支付接口调用实现支付功能
支付宝支付 (沙箱版)
1.进入支付宝开发者平台(https://open.alipay.com/platform/home.htm)
2.进入沙箱研发服用应用
3.设置好自己的公钥密钥
4.公私钥获取可在支付宝开放平台点击----->>文档下载工具密钥生成工具
5.配置好公密钥后编写带码------在maven中加入支付宝sdk包 (本人使用的spring boot框架)
6.配置支付宝需要的公共参数 可以使用支付宝提供的AlipayConfig类 最好将参数配置在 配置文件中便于维护 这里我使用的是 .yml配置文件、配置如下
(注意:不同换进配置不同支付网关)
7.在项目中获取yml配置的公共参数(使用注解@Value("${位置}")读取配置数据)
(下面开始写api来调起支付宝支付)
8.在项目service层编写接口 如图
(由于项目是前后端分离的 所以控制页面跳转的 支付宝同步回调 交由前端编写 控制)
9.实现impl 代码如下
请求
/*** 支付宝支付请求*/@Overridepublic void aliPay(HttpServletResponse response, HttpServletRequest request,Integer id) throws Exception {QueryWrapper<SOrder> wrapper = new QueryWrapper<>();wrapper.eq("id",id);SOrder order = orderMapper.selectList(wrapper).get(0);//获得初始化的AlipayClientAlipayClient alipayClient = new DefaultAlipayClient(alipayConfig.gatewayurl,alipayConfig.appId,alipayConfig.rsaPrivateKey, "json",alipayConfig.charset,alipayConfig.alipayPublicKey,alipayConfig.signType);//设置请求参数AlipayTradePagePayRequest aliPayRequest = new AlipayTradePagePayRequest();//请求参数Map<String , Object> map = new HashMap<>();String tradeNumber = order.getOId().substring(0,16);StringBuffer sb = new StringBuffer();int random=(int)((Math.random()*9+1)*100000);sb.append(tradeNumber);sb.append(random);SOrder sOrder = new SOrder();sOrder.setOId(sb.toString());QueryWrapper<SOrder> queryWrapper = new QueryWrapper<>();queryWrapper.eq("id",id);orderMapper.update(sOrder,queryWrapper);SOrdertype orderType = new SOrdertype();orderType.setOId(sb.toString());QueryWrapper<SOrdertype> objectQueryWrapper = new QueryWrapper<>();objectQueryWrapper.eq("o_id",order.getOId());orderTypeMapper.update(orderType,objectQueryWrapper);map.put("out_trade_no",sb.toString());//订单编号map.put("product_code","FAST_INSTANT_TRADE_PAY");//编码map.put("subject","++++++++++");//交易名map.put("total_amount",String.valueOf(order.getTotalPrice()));//总金额String string = JSONObject.toJSONString(map);log.info("-----------json封装参数-------"+string);aliPayRequest.setBizContent(string);aliPayRequest.setReturnUrl(alipayConfig.returnUrl);aliPayRequest.setNotifyUrl(alipayConfig.notifyUrl);String result = alipayClient.pageExecute(aliPayRequest).getBody();response.setContentType("text/html;charset=utf-8");log.info("返回结果=" + result);response.getWriter().write(result);response.getWriter().flush();response.getWriter().close();}
异步回调
/** 异步回调* */@Overridepublic String payNotify(HttpServletResponse response , HttpServletRequest request) {log.info("-----------request-----------"+request.getParameterMap());try {//获取支付宝回调所有参数Map<String, String> params = getParameterMap(request);//医路通订单编号String out_trade_no = params.get("out_trade_no");//支付总金额String total_amount =params.get("total_amount");//支付交易订单号String trade_no = params.get("trade_no");//交易状态String trade_status = params.get("trade_status");//参数1:支付宝返回参数//参数2:支付宝公钥//参数3:字符编码//参数4:加密方式boolean verify = AlipaySignature.rsaCheckV1(params,alipayConfig.alipayPublicKey,alipayConfig.charset, alipayConfig.signType);log.info("++++++++++++++++++++++++++++异步回调:"+verify+"++++++++++++++++++++++++++++++++");if (verify){//验签--判断是否是支付宝返回信息if (trade_status.equals("TRADE_FINISHED") || trade_status.equals("TRADE_SUCCESS")){//2.判断支付宝回调是否成功SOrder order = new SOrder();order.setTradeNumber(trade_no);order.setOId(out_trade_no);order.setTotalPrice(new BigDecimal(total_amount));order.setOrderStatus(1);//订单状态标识 (0:待支付;1:已支付;2:已取消;3:已退款)order.setPaymentTime(new Date());order.setPaymentMethod("支付宝");QueryWrapper<SOrder> wrapper = new QueryWrapper<>();wrapper.eq("o_id",out_trade_no);orderMapper.update(order,wrapper);SOrdertype sOrdertype = new SOrdertype();sOrdertype.setTradeNumber(trade_no);QueryWrapper<SOrdertype> queryWrapper = new QueryWrapper<>();queryWrapper.eq("o_id",order.getOId());orderTypeMapper.update(sOrdertype,queryWrapper);System.out.println("success");return "success";}else {return "failure";}}else {//验签--失败return "failure";}}catch (Exception e) {e.printStackTrace();}return "failure";}
10.controller是最为简单的啦 还是来给你们来一下
@AutowiredAlipayService alipayService;//支付@RequiresAuthentication@ApiOperation("支付")@RequestMapping(value = "/pay",method = RequestMethod.GET)public void payment(HttpServletResponse response , HttpServletRequest request,@ApiParam(name = "id" ,value = "订单id")Integer id) throws Exception {log.info("{=======================》》》》》》》》支付宝请求信息}"+id);alipayService.aliPay(response,request,id);}@ApiOperation("异步回调")@RequestMapping("/payNotify")public String payNotify (HttpServletResponse response , HttpServletRequest request){String success = alipayService.payNotify(response,request);log.info("{======================》》》》》》》》支付宝异步回调信息}"+success);return success;}
头一次写博客、不好的地方请多多关照
支付宝支付接口调用实现支付功能相关推荐
- 微信支付接口调用问题(android正常,iphone调不起)
碰到的问题 :根据微信提供的示例代码(ASP.NET),配置好一切后, 用android微信客户端返回,调起支付接口一切正常, 但使用iphone微信客户端时,点击"立即支付"按钮 ...
- 如何申请游戏支付接口(三方支付)
如何申请游戏支付接口(三方支付) 随着科技的发展,各类游戏产品层出不穷,而游戏都离不开充值,充值就需要有相应的游戏支付接口,那么我们如何申请游戏支付接口呢? 一.如何申请游戏支付接口 1.第三方支付接 ...
- 电商平台接入第三方支付接口之微信支付接入订单系统
边做边更新------ 先接入微信接口: 支付方式:用户扫描二维码支付 接口类型:扫码支付之模式二 先copy一份模式二的业务流程时序图 业务流程说明: (1)商户后台系统根据用户选购的商品生成订单. ...
- PrestaShop支付接口-网银在线支付,在线支付收款,外贸收款
2019独角兽企业重金招聘Python工程师标准>>> 国内第一家支持prestashop中文支付接口网银在线-chinapay 需要请联系QQ:1285872439 PrestaS ...
- 第三方支付接口 个人第三方支付接口 第三方支付接口费率
第三方支付接口 个人第三方支付接口 第三方支付接口费率 支付扫码是现在很多人日常都会有的一个行为,不管是去超市.饭店还是其他地方消费的话都会打开微信扫描商家提供的收款码.不过有很多商家和消费者就发现微 ...
- 网站支付宝支付接口调用
1.登录蚂蚁金服,创建应用,并且添加支付功能,支付功能必须是商户才能签约成功, 添加应用后,需要设置密钥,按支付宝提供的工具生成 支付宝公钥和商家私钥.将支付宝公钥填入rsa2密钥中即可. 2. 因为 ...
- 支付宝手机网页支付接口调用
1.前期工作 1.1 登陆支付宝官网 网址:https://www.alipay.com/ 1.2 下载手机网站支付的demo的步骤 1.2.1 先点击API,选择手机网站支付模块点击 1.2.2 点 ...
- 2021年最新易支付修复版源码支持微信支付宝官方接口和码支付网信钱包等/个人也能用的易支付商户系统
介绍: 安装环境介绍:Linux + Nginx1.1x +PHP7.2 +MySql5.6 集合了微信官方+支付宝官方+易商户+码支付+易通商户+网信钱包免签即时到账接口,让个人用户也能用上好用的易 ...
- 创建支付订单调用三方支付(支付宝支付)
创建一个表保存店铺的支付宝信息:店铺的私钥,appid,支付宝的公钥,店铺名等其他需要的字段 交换支付宝的公钥 如果使用了内网穿透工具,要记住去官网该自己的ip和端口号,不然异步回调找不到路径 一.准 ...
最新文章
- java逻辑符号怎么打_Java的逻辑运算符?
- SSH登录忽然变慢与DNS反向解析问题处理
- java使用链栈实现迷宫求解
- (转).Net/C# 获取字节流编码
- 基于openFrameworks 三维重建 2018.10.25
- linux下各种软件安装方法详解
- NYOJ 题目528 找球号(三)
- C++实现邻接表存储的图及bfs遍历
- apache hive_通过6个简单的步骤在Windows上运行Apache Hive
- 鱼不长肢蛇不长脚,多多益善更烦恼?人猴嵌合肥胖有救,生活还要压力要小!...
- php easysms,二次开发-如何在PHPEMS-发送短信验证码(以easy-sms为例)
- ocr文字识别软件ABBYY FineReader介绍
- [转载] Python十大装B语法
- 贴片铝电容识别及型号_铝电容和钽电容的区别,你们知道吗?
- 短视频标题自动生成工具,助你打造爆款标题
- golang java 对比_golang编程语言和java的性能对比
- wegame显示密保服务器,wegame英雄联盟怎么选定大区
- 程序员的悲哀是什么?
- Vuejs路由出现‘login/12/login/12/login/12/test’重复地址的解决办法
- GOOGLE搜索技巧