支付宝扫码支付示例源码

支付宝扫码付,相对来说根据开发文档开发的话,基本上可以一遍过的.直接上代码.

controller:

@RequestMapping(value = {"/api/alijspay"})
@RestController
@Slf4j
@Api(value = "alipay扫码支付相关",tags = "alipay扫码支付相关")
public class AliJSPayController extends BaseController {@Autowiredprivate lAliPayService aliPayService;@PostMapping("/payRequest")@ApiOperation("统一下单alipay支付.")public Result payRequest(HttpServletResponse responses, @RequestBody MallOrderJSPayDto mallOrderJSPayDto) throws Exception {log.info("ali 支付:{}",mallOrderJSPayDto);try {Map<String,String> map =  aliPayService.jsPayRequest(responses,mallOrderJSPayDto);return super.success(map);} catch (Exception e) {log.info("订单ali支付异常:{}",e);return super.error("订单数据异常!");}}@PostMapping(value = "/aliPayOrderCallBack")@ApiOperation("alipay支付回调")public Map<String, String> aliPayOrderCallBack(HttpServletRequest request){Map<String, String> map = new HashMap<String, String>();try {AliPayVO aliPayVo = aliPayService.aliJsPayCallBack(request);aliPayService.aliJsPayOrderCallBack(aliPayVo);map.put("msg", "SUCCESS");} catch (Exception e) {e.printStackTrace();log.error("aliPayOrderCallBack Error.",e);}return map;}@PostMapping(value = "/getAliJspayStaus")@ApiOperation("alipay扫码付状态查询")public Result getAlijspayStaus(@RequestParam("orderId")String orderId){Map<String, Object> map = new HashMap<String, Object>();try {map = aliPayService.getAlijspayStaus(orderId);return super.success(map);} catch (Exception e) {e.printStackTrace();log.error("aliPayOrderCallBack Error.",e);}return super.error();}
}

service:

public interface FriendsMallAliPayService {//支付宝扫码支付public Map<String,String> jsPayRequest(HttpServletResponse responses, MallOrderJSPayDto mallOrderPayDto) throws Exception;//支付宝扫码付订单状态查询public Map<String, Object> getAlijspayStaus(String orderId) throws Exception;//支付宝扫码付支付宝回调public AliPayVO aliJsPayCallBack(HttpServletRequest request) throws Exception;//支付宝扫码付订单支付回调业务处理public void aliJsPayOrderCallBack(AliPayVO aliPayVo) throws Exception;
}

Impl:

  @Overridepublic Map<String,String> jsPayRequest(HttpServletResponse responses, MallOrderJSPayDto mallOrderPayDto) throws Exception {//TODO 要查库.获取配置-扫码付单独一套支付库表AlipayConfig alipayConfig = new AlipayConfig();alipayConfig.setUrl(Consts.ALIPAY_REQUEST_URI);alipayConfig.setAppId("");//appId alipayConfig.setRsaPrivateKey("");//私钥alipayConfig.setAlipayPublicKey("");//公钥alipayConfig.setCharset(Consts.ALIPAY_CHARSET);//编码格式alipayConfig.setFormat(Consts.ALIPAY_FORMAT);//返回格式alipayConfig.setSignType(Consts.ALIPYA_SIGNTYPE);//签名方式//实例化客户端log.info("实例化客户端开始=====================");AlipayClient alipayClient = new DefaultAlipayClient(alipayConfig.getUrl(), alipayConfig.getAppId(),alipayConfig.getRsaPrivateKey(), alipayConfig.getFormat(), alipayConfig.getCharset(),alipayConfig.getAlipayPublicKey(), alipayConfig.getSignType());AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest();//创建API对应的request类Map<String,Object> map=new HashMap<>();//设置回调地址request.setNotifyUrl(Consts.ALIJSPAY_ORDER_CALLBACK);//根据订单号查询订单信息Map<String,Object> maps=new HashMap<>();String orderNum = PayUtils.getOrderNumber();log.info("支付订单号:{}",orderNum);maps.put("out_trade_no",orderNum);//TODO 测试使用maps.put("total_amount","0.01");maps.put("subject",subject);maps.put("timeout_express",Consts.TIMEOUT_EXPRESS);//把订单信息转换为json对象的字符串String postdata = new JSONObject(maps).toString();request.setBizContent(postdata);AlipayTradePrecreateResponse response = alipayClient.execute(request);String body = response.getBody();log.info("body:{}",body);JSONObject jsonObject = JSONObject.parseObject(body);log.info("jsonObject:{}",jsonObject);String qr_code = jsonObject.getJSONObject("alipay_trade_precreate_response").getString("qr_code");log.info("qr_code:{}",qr_code);byte[] bytes = QRCodeUtil.encodeReturnFile(qr_code);ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes);//转成File 上传阿里云MultipartFile temFile = new MockMultipartFile("file", byteArrayInputStream);byteArrayInputStream.close();String url = ossUtil.upload(temFile);log.info("url:{}",url);Map<String,String> mapReturn = Maps.newHashMap();mapReturn.put("url",url);mapReturn.put("orderNum",orderNum);return mapReturn;}@Overridepublic Map<String, Object> getAlijspayStaus(String orderId) throws Exception {//TODO 要查库.获取配置 -扫码付单独一套AlipayConfig alipayConfig = new AlipayConfig();alipayConfig.setUrl(Consts.ALIPAY_REQUEST_URI);alipayConfig.setAppId("");//appId alipayConfig.setRsaPrivateKey("");//私钥alipayConfig.setAlipayPublicKey("");//公钥alipayConfig.setCharset(Consts.ALIPAY_CHARSET);//编码格式alipayConfig.setFormat(Consts.ALIPAY_FORMAT);//返回格式alipayConfig.setSignType(Consts.ALIPYA_SIGNTYPE);//签名方式//实例化客户端log.info("实例化客户端开始=====================");AlipayClient alipayClient = new DefaultAlipayClient(alipayConfig.getUrl(), alipayConfig.getAppId(),alipayConfig.getRsaPrivateKey(), alipayConfig.getFormat(), alipayConfig.getCharset(),alipayConfig.getAlipayPublicKey(), alipayConfig.getSignType());//创建API对应的request类AlipayTradeQueryRequest request = new AlipayTradeQueryRequest();Map<String,Object> map=new HashMap<>();map.put("out_trade_no",orderId);String returndata = new JSONObject(map).toString();//设置业务参数request.setBizContent(returndata);//通过alipayClient调用API,获得对应的response类AlipayTradeQueryResponse response = alipayClient.execute(request);JSONObject jsonObject = JSONObject.parseObject(response.getBody()).getJSONObject("alipay_trade_query_response");String code = jsonObject.getString("code");String msg = jsonObject.getString("msg");Map<String,Object> returnmap=new HashMap<>();if (code.equals("10000") && msg.equals("Success")){System.out.println("交易查询请求成功");String trade_status = jsonObject.getString("trade_status");if (trade_status.equals("TRADE_SUCCESS")){returnmap.put("type","1");returnmap.put("data","支付成功");}else {returnmap.put("type","0");returnmap.put("data",trade_status);}}else {System.out.println("交易查询请求失败");returnmap.put("type","0");returnmap.put("data",jsonObject.getString("sub_msg"));System.out.println(jsonObject);//返回失败信息}return returnmap;}@Overridepublic AliPayVO aliJsPayCallBack(HttpServletRequest request) throws Exception {AlipayConfig alipayConfig = new AlipayConfig();alipayConfig.setUrl(Consts.ALIPAY_REQUEST_URI);alipayConfig.setAppId("");//appId alipayConfig.setRsaPrivateKey("");//私钥alipayConfig.setAlipayPublicKey("");//公钥alipayConfig.setCharset(Consts.ALIPAY_CHARSET);//编码格式alipayConfig.setFormat(Consts.ALIPAY_FORMAT);//返回格式alipayConfig.setSignType(Consts.ALIPYA_SIGNTYPE);//签名方式//获取支付宝反馈信息Map<String, String> params = new HashMap<String, String>();Map<String, String[]> requestParams = request.getParameterMap();for (Iterator<String> 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);}//调用SDK验证签名boolean signVerified = AlipaySignature.rsaCheckV1(params, alipayConfig.getAlipayPublicKey(), alipayConfig.getCharset(), alipayConfig.getSignType());//校验签名if (!signVerified) {log.error("1.支付宝支付回调签名不正确");throw new Exception("支付宝支付回调签名不正确");}//校验支付状态if (!request.getParameter("trade_status").equals("TRADE_SUCCESS")) {log.error("2.支付宝支付回调支付状态不正确");throw new Exception("支付宝支付回调支付状态不正确");}AliPayVO aliPayVo = new AliPayVO();//商户订单号-系统生成订单号String outTradeNo = request.getParameter("out_trade_no");aliPayVo.setOutTradeNo(outTradeNo);//支付订单号-阿里28位订单号String tradeNo = request.getParameter("trade_no");aliPayVo.setPayOrderNo(tradeNo);//交易状态String tradeStatus = request.getParameter("trade_status");aliPayVo.setTradeStatus(tradeStatus);//资金总额String totalAmount = request.getParameter("total_amount");aliPayVo.setTotalAmount(totalAmount);//卖家支付宝账户String sellerId = request.getParameter("seller_id");aliPayVo.setSellerId(sellerId);//买家支付宝账户String buyerLogonId = request.getParameter("buyer_logon_id");aliPayVo.setBuyerLogoinId(buyerLogonId);//签名方式aliPayVo.setSignType(alipayConfig.getSignType());//签名String sign = request.getParameter("sign");aliPayVo.setSign(sign);return aliPayVo;}@Overridepublic void aliJsPayOrderCallBack(AliPayVO aliPayVo) throws Exception {log.info("3.alipay 回调开始============:{}",aliPayVo);if (aliPayVo != null && StringUtil.isNotEmpty(aliPayVo.getOutTradeNo())) {synchronized (aliPayVo.getOutTradeNo()) {MallUserRechargeDetail order = friendsMallUserRechargeDetailService.selectByOrderId(aliPayVo.getOutTradeNo());if (order.getStatus().equals(0)) {if (aliPayVo.getTradeStatus().equals("TRADE_FINISHED")) {//交易创建,等待买家付款log.info("4.交易创建,等待买家付款:TRADE_FINISHED");} else if (aliPayVo.getTradeStatus().equals("WAIT_BUYER_PAY")) {//未付款交易超时关闭,或支付完成后全额退款log.info("5.未付款交易超时关闭,或支付完成后全额退款:WAIT_BUYER_PAY");} else if (aliPayVo.getTradeStatus().equals("TRADE_CLOSED")) {//交易结束,不可退款log.info("6.交易结束,不可退款:TRADE_CLOSED");} else if (aliPayVo.getTradeStatus().equals("TRADE_SUCCESS")) {//交易支付成功log.info("7.支付状态成功:TRADE_SUCCESS");}} else {log.info("29.该订单已支付处理,交易编号为: " + aliPayVo.getOutTradeNo());}}}}

uploadUtil:

public String upload(MultipartFile file) throws IOException {InputStream inputStream = file.getInputStream();try {String currentTimeFile = new DateTime(System.currentTimeMillis()).toString("yyyy_MM_dd_HH_mm_ss_SSS");//获取文件后缀String name2 = FileUtil.getExtensionName(file.getOriginalFilename());if (Objects.isNull(name2) || "".equals(name2)){name2 = "jpg";}String newFileName = "friends" + "_"+ currentTimeFile+ "."+ FileUtil.getExtensionName(file.getOriginalFilename());log.info("newFileName:{}", newFileName);// 上传路径String ossFullPath = "";//TODO 路径规则待需求确认之后再修改 ->最优格式lesson/tag/version/course.zipossFullPath = new StringBuilder().append(Consts.FRIENDS).append(Consts.SEPARATOR).append(currentTimeFile).append(Consts.SPOT).append(name2).toString();log.info("ossFullPath1:{}", ossFullPath);ObjectMetadata objectMetadata = new ObjectMetadata();objectMetadata.setContentType("image/jpg");ossConfig.getOssClient().putObject(ossConfig.getBucketName(), ossFullPath, inputStream,objectMetadata);Date expiration = new Date(System.currentTimeMillis() + ossConfig.getExpiration());String url = ossConfig.getOssClient().generatePresignedUrl(ossConfig.getBucketName(), ossFullPath, expiration).toString();log.info("oss上传返回url:{}",url);return url;} catch (Exception e) {log.info("上传异常:{}");return null;}finally {try {if (null != inputStream){inputStream.close();inputStream =null;}} catch (IOException e) {log.info("流关闭异常,忽略!");}}}

Consts:

public class Consts {//支付宝请求路径public static final String ALIPAY_REQUEST_URI = "https://openapi.alipay.com/gateway.do";//支付宝编码格式public static final String ALIPAY_CHARSET = "utf-8";//支付宝返回格式public static final String ALIPAY_FORMAT = "json";//支付宝签名方式public static final String ALIPYA_SIGNTYPE = "RSA2";//支付宝APP回调地址public static final String ALIPAY_ORDER_CALLBACK = "http://127.0.0.1:8040/api/alipay/aliPayOrderCallBack";//支付宝扫码付回调地址public static final String ALIJSPAY_ORDER_CALLBACK = "http://127.0.0.1:8040/api/alijspay/aliPayOrderCallBack";//支付宝订单过期时间public static final String TIMEOUT_EXPRESS = "30m";//微信的packagepublic static final String PACKAGE_VALUE = "Sign=WXPay";//微信支付类型 -APPpublic static final String TRADE_TYPE_APP = "APP";//微信支付类型 -NATIVEpublic static final String TRADE_TYPE_NATIVE = "NATIVE";//微信签名方式-回调使用public static final String SIGN_TYPE = "ASCII";//订单支付微信回调地址public static final String TENPAY_ORDER_CALLBACK = "http://127.0.0.1:8040/api/tenpay/tenPayOrderCallBack";//微信二维码回调地址public static final String TENPAY_QR_CALLBACK = "http://127.0.0.1:8040all/api/wxjspay/tenPayOrderCallBack";}

支付宝扫码支付示例源码相关推荐

  1. PHP三网码支付系统源码PC软件带云端源码/含三套前端模板免签支付系统安装教程

    简介: 三网码支付系统源码,完美可用,微信需要PC软件,支付宝和QQ不用软件 搭配环境 PHP版本7.0-8.0 搭建安装教程 1,解析3个域名,然后添加站点 2,分别上传源码到哪3个域名里面,解压 ...

  2. 2023 源支付码支付系统源码v3.0 二开修复版 全本地化

    搭建教程: Nginx + PHP 7.2 + Mysql 5.6: 上传源码到根目录 设置网站运行目录public. 随后设置伪静态为thinkphp 打开域名就可以到安装界面了

  3. uniapp 在 H5、App、微信小程序中使用 svga 格式动画详细示例教程,附插件源码及示例源码(常见于网页直播刷礼物特效功能)

    前言 兼容 h5 网页,微信小程序 和 App. 本文详细讲解在 uni-app项目中,如何实现 svga 格式动画的引入及展示. 组件源码及使用文档都有! 你直接复制本文的源码,即可得到封装好的 s ...

  4. 支付宝当面付php接入源码下载,支付宝当面付(扫码支付)实例源码下载(官方)

    [实例简介] 提示:需将 config.cs中的 配置信息 改成自己申请的 支付宝信息 即可. 一.免责申明 DEMO仅供参考,实际开发中需要结合具体业务场景修改使用. 二.运行环境: .net fr ...

  5. 最新CcPay多商户个人收款码支付系统源码+UI很不错

    正文: 测试环境:Apache 2.4.41+php5.6需按照扩展memcache+memcached+redis才能运行,后台:xxx.com/admin账号:admin 6666,网站目录/pu ...

  6. O泡易支付系统源码全开源版本

    O泡易支付系统源码全开源版本 最新O泡易支付系统源码-源码全解密,无后门,本地资源化 搭建环境:PHP 5.4 以上 推荐7.0搭建必备:服务器/主机 域名 搭建教程:1.源码传到空间 解压2.解析个 ...

  7. uniapp - 超详细 H5 网站图片压缩功能,图像上传前进行压缩降低大小并上传到服务器完整示例源码(附带 uview 组件库 u-upload 上传组件与该图片压缩插件 “搭配组合“ 使用教程)

    前言 网上的文章代码非常乱,各种无注释及平台不通用的问题,根本无法改造为自己想要的效果. 本文站在小白的角度,从 0-1 详细描述了 uniapp H5 网页平台下,图片上传前 "压缩降低大 ...

  8. 一小时学会使用Springboot整合沙箱环境支付宝支付(附源码)

    0.前言 文章需求: 对于学生来说,目前网上确实没有比较统一而且质量好的支付教程.因为支付对个人开发者尤其是学生来说不太友好.因此,自己折腾两天,算是整理了一篇关于支付宝沙箱支付的文章. 那么为什么不 ...

  9. Java互联网支付系统源码,基于SpringBoot,含支付宝,微信,银联详细代码案例

    spring-boot-pay 支付服务:支付宝,微信,银联详细 代码案例 (支付宝和微信支付测试均需要企业认证,如果没有企业推荐使用 [服务商模式] 申请开通个人商户 也可以测试 ),项目启动前请仔 ...

最新文章

  1. 使用flask-WTF,Flask-Login,sqlite3实现登录和注册(前端登录和注册页面)
  2. SCOM发送邮件通知
  3. 网络测试与分析工具简介
  4. OSPF中DR选举机制详解
  5. 352. Data Stream as Disjoint Intervals
  6. Leet Code OJ 172. Factorial Trailing Zeroes [Difficulty: Easy]
  7. win10系统要求配置_酒店智能化集成系统设计要素、系统功能要求和配置标准
  8. echarts 地图 dispatchaction不好使_数据分析帝:广东省客户数量地图展示,如何通过python实现?...
  9. 浅入浅出数据结构(18)——希尔排序
  10. 给图片添加水印效果图的函数(可以在图片上添加自己的版权和LOGO图片的水印) 【转载】...
  11. 小型英语字典(字典训练)
  12. Oracle EBS-SQL (OM-2):检查OM常用表
  13. python安装request方法mac_Mac下python3使用requests库出现No module named 'requests'解决方法...
  14. ReactNative 仿造 ofo 共享单车快速开发的app
  15. 屏幕录像大师2016【破解版】
  16. 车型代号对照表_2017年最新主机厂车型代号对照表
  17. ROS中机械手臂的运动规划
  18. label confusion learning to enhance text classification models
  19. apache zip java_java中ant包中的org.apache.tools.zip实现压缩和解压缩
  20. 微信发单机器人_微信多客服系统SDK通信接口

热门文章

  1. PHP检测字数,PHP获取word文档字数的问题
  2. CHROME源码剖析 上《转》
  3. 计算机研究生就业方向之考编
  4. IntelliJ IDEA2017.3激活
  5. 计算机无法开机如何读u盘启动,电脑无法识别U盘启动盘怎么办?
  6. stata实现经济生态的空间杜宾模型
  7. 我是K哥,大厂高管,抓住过几次风口,交个朋友吧
  8. 计算机进制与信息编码,信息与二进制编码
  9. linux signal
  10. rgb sw 线主板接口在哪_纯白信仰打造RGB主机,四件套提升100%性能-Thermaltake