java实现支付宝扫码支付Demo源码

扫码效果图

需要现成源码的朋友,可以加Q76949433,提供技术支持!

项目结构截图:

package com.pay.common;

public class AliPayConfig {

public static String returnUrl="http://test.pay.sucaiku.xin";public static String notifyUrl="http://test.pay.sucaiku.xin/alipayNotifyServlet";public static String appId="2018235502132232140";public static String alipayPublicKey="MIIBIjANB12121iG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAomvTj08OCZy3OJr5jGEquQMiLASsDPOCc9C5v240prBNNkwIHPPE3LeO0alcgMXCBNxoC62L3sSe69ZfMMPMEnwO05yofrT1VkLnKsGDLirKv3vbmOEn+D5rree532DfMfI3s3IFX6OCQIDAQAB";public static String privateKey="MIIEvgIBq2ddewqhksss9w0BAQEFAASCBKgwggSkAgEAAoIBAQDKXggIp3vtM37eMdplPvK+R+DOkA82nuWe4ytQPiO2nJ2ZpxLsTmfTrmvu3zDhENAJ2vKa4ykmGurJtLsP3ZI9hKZbCqKzTVLqeeZKBxmECzZ0OQihGSPhpyMY2+qsH3iMrBzGLozON/4j6G5b+9m9kgwH94ETvspUnp3E1LquAUb7DaHCriI2gVezTBmAwj2xBk+HraJKxAYw1ni+xLLxjcHDE81XHHItGyCihY87GXxr9FuGRj7/j8M30w2bWJWdvT399wol+6iCdKZuI6l1CWlk+omgHG59Hse45+z0yx3pPmGrlilseNW+iQAxaASmd7DytfUWMNIni+HaPkbNAgMBAAECggEBAIzuiXfFdCfQShVh8K+78/+SPTx935343Vb9pM8PF32zJhW4N+k19Tw3z+cQNlMEQejxRakZ7MONAvG6aW6ndgw3kqqRYTK1QFoWci0HPhbjeCzS0w7F6AVHw849EvB2zDWjpF/I+G3uLRTLSIhAwdXGlSdD4zJUEhlTnzYIhWqCLMPEa2u6pL4awfyytVc87305dK6a56DMz+ysrW9mhwnY/bZEdutJIeIZIPXyzc4GEkhFLcH74J33WkRrvYoUaG2mETPgr9detY241214Rknx7kwGvviq/GjjjCnWYWLfMLf/F2VwGE/WsK5qhsEOUyawv4ECgYEA7Rg/OSCWVyA1XgvLgws3q1GMemvtFmPq+k/mvBjrMo8vgm0XI/Czfc4E2F0QV0tCqt9koJ0IAHBjVmAbbB5HZTQjW4O4o92NnbV6nxO1QqBXD+V1GVLK47WDF/I/1wMlhenGxsn5axSCk6Yy0boOG739odqh2FoqJ2XkJcptgqECgYEA2oDnJDBG2xhRfMDr1KJM+g58IEK/X74RpIVXiZVPnrVHHhJjvj+LpMtoYMOroVqJ6DglY4/U3p/BIQkDHGFx5V7kypzOao7YbkJO8x82Tsd3s9HtQ5gqSDnDdA+6s1rcLjLkA+HgStXhecHdfVD+DJQNl/tcSpwdhc/4CwIdAK0CgYEAhFCJx/nVrN2+qrNuab1y3druyMs+TsaINhUtMT++0kJyQxlaVqZXpRe6QHz/R5gqpm1xHOlFs+kEpwmPhDEJqwMD0GicPGbCR4cl3W0ENSCCNc7aIL3BmH6NoGmDEx0gbbFfS0UgOpABpyCTL9PjV7wZtZ/rvm/jIoWMY0KrBsECgYBrEq2x0yJ1rNYJrzQhj6LvCngTCwJitW5J07nQxuUsXaLK/rH4AYW5rJ+qg1gwioB31kOkJVBoA5sNSDBJEQtSHg05qFuSZgtzBHVRuCLRufdTm/SLoh5eJEg+MJMJ3uV0kiWgLWjO4z5JfxG9nhnQKiD7MAbK3POupfnj0xZJRQKBgAR5PzYtuKlH6HC3T7pcwkM9Gy8dgxqRXnk8KvrFBYLw/fAG5xW/5eytgZHq042iVNZLHD234242lugHT4C9oCk/Zw7p4NIQcdUYOR0O9l19sb+SkPGNxFJG8waZrzbxDR92414216wI";public static String apiUrl="https://openapi.alipay.com/gateway.do";public static String charset = "UTF-8";public static String signType="RSA2";

}

package com.pay.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.alipay.api.AlipayApiException;
import com.alipay.api.domain.AlipayTradePagePayModel;
import com.jpay.alipay.AliPayApi;
import com.jpay.alipay.AliPayApiConfig;
import com.jpay.alipay.AliPayApiConfigKit;
import com.jpay.util.StringUtils;
import com.pay.common.AliPayConfig;

/**

  • 支付宝扫码支付
  • @author Administrator

*/
public class AliPayCodeServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

public AliPayCodeServlet() {super();
}protected void service(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {try {AliPayApiConfig aliPayApiConfig;try {aliPayApiConfig = AliPayApiConfigKit.getApiConfig(AliPayConfig.appId);} catch (Exception e) {aliPayApiConfig = AliPayApiConfig.New();//支付宝appidaliPayApiConfig.setAppId(AliPayConfig.appId);//支付宝公钥aliPayApiConfig.setAlipayPublicKey(AliPayConfig.alipayPublicKey);//编码方式aliPayApiConfig.setCharset(AliPayConfig.charset);//应用私钥aliPayApiConfig.setPrivateKey(AliPayConfig.privateKey);//支付网关aliPayApiConfig.setServiceUrl(AliPayConfig.apiUrl);//签名方式aliPayApiConfig.setSignType(AliPayConfig.signType);aliPayApiConfig.build();AliPayApiConfigKit.putApiConfig(aliPayApiConfig);}//进度String totalAmount = "0.01";//订单号String outTradeNo = StringUtils.getOutTradeNo();//同步回调String returnUrl = AliPayConfig.returnUrl;//异步回调String notifyUrl = AliPayConfig.notifyUrl;AlipayTradePagePayModel model = new AlipayTradePagePayModel();model.setOutTradeNo(outTradeNo);//产品 固定值model.setProductCode("FAST_INSTANT_TRADE_PAY");model.setTotalAmount(totalAmount);model.setSubject("订单标题");model.setBody("订单描述");model.setPassbackParams("passback_params");//0:订单码-简约前置模式,对应 iframe 宽度不能小于600px,高度不能小于300px;//1:订单码-前置模式,对应iframe 宽度不能小于 300px,高度不能小于600px; //3:订单码-迷你前置模式,对应 iframe 宽度不能小于 75px,高度不能小于75px; //4:订单码-可定义宽度的嵌入式二维码,商户可根据需要设定二维码的大小。 //跳转模式下,用户的扫码界面是由支付宝生成的,不在商户的域名下。 //2:订单码-跳转模式model.setQrPayMode("4");//二维码尺寸model.setQrcodeWidth(300L);AliPayApi.tradePage(response, model, notifyUrl, returnUrl);} catch (AlipayApiException e) {e.printStackTrace();}
}

}

package com.pay.servlet;

import java.io.IOException;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.alipay.api.AlipayApiException;
import com.alipay.api.internal.util.AlipaySignature;
import com.jpay.alipay.AliPayApi;
import com.pay.common.AliPayConfig;

/**

  • 支付宝回调
  • @author Administrator

*/
public class AlipayNotifyServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

public AlipayNotifyServlet() {super();
}protected void service(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {System.err.println("收到支付宝回调");// 获取支付宝POST过来反馈信息try {Map<String, String> params = AliPayApi.toMap(request);for (Map.Entry<String, String> entry : params.entrySet()) {System.err.println(entry.getKey() + " = " + entry.getValue());}boolean verify_result = AlipaySignature.rsaCheckV1(params, AliPayConfig.alipayPublicKey, AliPayConfig.charset, AliPayConfig.signType);if (verify_result) {// 验证成功// TODO 请在这里加上商户的业务逻辑程序代码 异步通知可能出现订单重复通知 需要做去重处理/** 字段对应的意思 在支付宝文档中对* https://docs.open.alipay.com/270/105902/* body = 订单描述subject = 订单标题sign_type = RSA2auth_app_id = 2018070260533140notify_type = trade_status_syncout_trade_no = 092623564015379point_amount = 0.00version = 1.0fund_bill_list = [{"amount":"0.01","fundChannel":"ALIPAYACCOUNT"}]passback_params = passback_paramsbuyer_id = 2088302257843420total_amount = 0.01trade_no = 2018092622001443420535911693notify_time = 2018-09-26 23:56:50charset = UTF-8invoice_amount = 0.01trade_status = TRADE_SUCCESSgmt_payment = 2018-09-26 23:56:50sign = NmYuT6lnoL7AIkK1c6oDqWhcIvaaAYGq1mEnWL3qqvyoUznccm5LABesSM1ciS0RyXmoL3HX2HDB2+b9FPqgwoFrZ6QQk0h6cJWhGD3nRJoMKK3mBwW9croDcdMhpupIrqpNcOJNDqdgA/89JpRjPy0Z6RYafIAoo0zxG56CYguR0yQw9Mfr9O3rlRqyN0IjqFDC5jh8Rox72j1PP6h2AyvDqgccTwE8sOS1caukhYMkmKwjSsHJRRo2Z3lQyeTDggH4drGowz/MU8Dfnf4jTqTnfcRh77Ya/LuNYuV8mPRG5Ay1H3hKX9EC9uXLx/CvM0ttY++Q1YVojMjXQWS9Xg==gmt_create = 2018-09-26 23:56:45buyer_pay_amount = 0.01receipt_amount = 0.01app_id = 2018070260533140seller_id = 2088131608520239notify_id = 2018092600222235650043420521185261*/System.err.println("notify_url 验证成功succcess");return;} else {System.err.println("notify_url 验证失败");return;}} catch (AlipayApiException e) {// TODO Auto-generated catch blocke.printStackTrace();}
}

}
package com.pay.util;

public class MoneyUtil {

public static String getMoney(String amount) {if (amount == null) {return "";}// 金额转化为分为单位String currency = amount.replaceAll("\\$|\\¥|\\,", ""); // 处理包含, ¥// 或者$的金额int index = currency.indexOf(".");int length = currency.length();Long amLong = 0l;if (index == -1) {amLong = Long.valueOf(currency + "00");} else if (length - index >= 3) {amLong = Long.valueOf((currency.substring(0, index + 3)).replace(".", ""));} else if (length - index == 2) {amLong = Long.valueOf((currency.substring(0, index + 2)).replace(".", "") + 0);} else {amLong = Long.valueOf((currency.substring(0, index + 1)).replace(".", "") + "00");}return amLong.toString();
}

}

java实现支付宝扫码支付和回调的Demo源码相关推荐

  1. php个人扫码支付,PHP个人发卡网源码,支持MA支付对接,扫码自动发货

    PHP个人发卡网源码,支持MA支付对接,扫码自动发货. 源码介绍 个人发卡网源码,支持码支付对接,扫码自动发货. 自适应网页,可为商品设置优惠套餐,后台管理功能丰富. 前台发卡页面有点粗糙,已开源的可 ...

  2. 基于JAVA疫苗药品批量扫码识别追溯系统计算机毕业设计源码+系统+数据库+lw文档+部署

    基于JAVA疫苗药品批量扫码识别追溯系统计算机毕业设计源码+系统+数据库+lw文档+部署 基于JAVA疫苗药品批量扫码识别追溯系统计算机毕业设计源码+系统+数据库+lw文档+部署 本源码技术栈: 项目 ...

  3. 2023彩虹易支付最新原版开源网站源码

    2023彩虹易支付最新原版开源网站源码,完整的易支付源码,无后门. 下载地址:https://www.djmale.cn/49.html 一.源码介绍 完整的易支付源码 全开源+批量生成商户+即时到账 ...

  4. 2022全新Oreo支付系统平台开源版源码

    源码下载:2022全新Oreo支付系统平台开源版源码-小程序文档类资源-CSDN下载 OREO支付系统是一个安全.可靠.专业.强大的免签约支付接口系统源码,采用了群集服务器,不仅防御高,故障率也相对来 ...

  5. Java定时任务(一) Timer及TimerTask的案例解析及源码分析

    Java定时任务(一)  Timer及TimerTask的案例解析及源码分析 一.概述: 定时任务这个概念在Java的学习以及项目的开发中并不陌生,应用场景也是多种多样.比如我们会注意到12306网站 ...

  6. java毕业设计——基于Java+Socket的视频会议系统设计与实现(毕业论文+程序源码)——视频会议系统

    基于Java+Socket的视频会议系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于Java+Socket的视频会议系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦.需要下 ...

  7. java计算机毕业设计Web医学院校大学生就业信息管理系统源码+mysql数据库+系统+lw文档+部署

    java计算机毕业设计Web医学院校大学生就业信息管理系统源码+mysql数据库+系统+lw文档+部署 java计算机毕业设计Web医学院校大学生就业信息管理系统源码+mysql数据库+系统+lw文档 ...

  8. Java开源生鲜电商平台-Java分布式以及负载均衡架构与设计详解(源码可下载)

    Java开源生鲜电商平台-Java分布式以及负载均衡架构与设计详解(源码可下载) 说明:主要是针对一些中大型的项目需要进行分布式以及负载均衡的架构提一些思路与建议. 面对大量用户访问.高并发请求,海量 ...

  9. java多用户商城 微商城 大型B2B2C商城平台系统源码

    java多用户商城 微商城 大型B2B2C商城平台系统源码 绑定微信公众号的网上商城系统,同时支持小程序多用户网店系统, 借其在社交和传播属性上的优势,进而打造成量级扩张的商城推广体系,以更高标准打造 ...

最新文章

  1. WindowsPhone基础琐碎总结-----数据绑定(一)
  2. 我的世界服务器伤害增加bug,我的世界服务器BUG解决办法大全
  3. Jquery源码解析-设计理念
  4. GitHub 4.6 万星:Windows Terminal 预览版开放下载!
  5. 调用cmd不显示黑框的方法
  6. Selenium API-WebDriver 方法
  7. VirtualBox虚拟机 四种网络接入模式
  8. Java中的ConcurrentModificationException
  9. xshell和xftp免费版官方(家庭、学校版)下载
  10. obs 推流编码在哪设置_斗鱼用obs直播的串流码填什么呀 新手 不懂
  11. python实时显示进度条_Python进度条实时显示处理进度的示例代码
  12. VL2 异步复位的串联T触发器
  13. 语义分割-FCNs in the wild: Pixel-level adversarial and constraint-based adaptation 对抗方法实现不同数据集语义分割
  14. TO B的百度云新品问世/价格腰斩 智能化DNA能撑起百度野心?
  15. ZYNQ sd卡启动失败,mmc0: error -84 whilst initialising SD card, SD卡只读,mmcblk0: mmc0:0001 SD 8 GiB (ro)
  16. Java脚本数组复制
  17. 计算机毕业论文致谢信范文,毕业论文致谢信范文
  18. 《数字营销实战》思维导图
  19. java实现简单扫码登录功能(模仿微信网页版扫码)
  20. 算法09——patA1033 加油站问题(贪心)

热门文章

  1. SongTaste音乐盒下载小工具
  2. linux目录权限都是nobody,你真的了解Linux的目录权限?
  3. 定时器主从模式实现PWM脉冲个数、占空比以及频率可调(250kHz以下)
  4. php 表单页面跳转,form表单页面跳转方式提交练习
  5. apache支持laravel路由_swoole运行模式加速laravel应用的详细介绍
  6. css计算函数 scalc 微信小程序_在微信小程序中,基于云函数发送邮件
  7. 程序员都会用到的13个Spring MVC实用技巧,收藏!!!
  8. linux 升内核 bbr,Linux 升级内核开启 TCP BBR 实现高效单边加速
  9. 【PYthon报错】np.complex128数字的虚数部分为0j
  10. 图解串行、并行和异步