热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

java实现支付宝扫码支付Demo源码扫码效果图做这个非常非常的困难,经历了很多很多坑后才能做出来,在这里贴一下相关的代码希望能帮助做支付开发的同事们,有不懂的问题可以咨询我QQ7



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

扫码效果图

支付宝扫码登录Demo源码

做这个非常非常的困难,经历了很多很多坑后才能做出来,在这里贴一下相关的代码希望能帮助做支付开发的同事们,有不懂的问题可以咨询我QQ76949433,提供技术解答

项目结构截图:

JAVA实现扫码支付

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();
//支付宝appid
aliPayApiConfig.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 params = AliPayApi.toMap(request);
for (Map.Entry 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 = RSA2
auth_app_id = 2018070260533140
notify_type = trade_status_sync
out_trade_no = 092623564015379
point_amount = 0.00
version = 1.0
fund_bill_list = [{"amount":"0.01","fundChannel":"ALIPAYACCOUNT"}]
passback_params = passback_params
buyer_id = 2088302257843420
total_amount = 0.01
trade_no = 2018092622001443420535911693
notify_time = 2018-09-26 23:56:50
charset = UTF-8
invoice_amount = 0.01
trade_status = TRADE_SUCCESS
gmt_payment = 2018-09-26 23:56:50
sign = NmYuT6lnoL7AIkK1c6oDqWhcIvaaAYGq1mEnWL3qqvyoUznccm5LABesSM1ciS0RyXmoL3HX2HDB2+b9FPqgwoFrZ6QQk0h6cJWhGD3nRJoMKK3mBwW9croDcdMhpupIrqpNcOJNDqdgA/89JpRjPy0Z6RYafIAoo0zxG56CYguR0yQw9Mfr9O3rlRqyN0IjqFDC5jh8Rox72j1PP6h2AyvDqgccTwE8sOS1caukhYMkmKwjSsHJRRo2Z3lQyeTDggH4drGowz/MU8Dfnf4jTqTnfcRh77Ya/LuNYuV8mPRG5Ay1H3hKX9EC9uXLx/CvM0ttY++Q1YVojMjXQWS9Xg==
gmt_create = 2018-09-26 23:56:45
buyer_pay_amount = 0.01
receipt_amount = 0.01
app_id = 2018070260533140
seller_id = 2088131608520239
notify_id = 2018092600222235650043420521185261*/

System.err.println("notify_url 验证成功succcess");
return;
} else {
System.err.println("notify_url 验证失败");
return;
}
} catch (AlipayApiException e) {
// TODO Auto-generated catch block
e.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();
}

}



推荐阅读
  • Servlet多用户登录时HttpSession会话信息覆盖问题的解决方案
    本文讨论了在Servlet多用户登录时可能出现的HttpSession会话信息覆盖问题,并提供了解决方案。通过分析JSESSIONID的作用机制和编码方式,我们可以得出每个HttpSession对象都是通过客户端发送的唯一JSESSIONID来识别的,因此无需担心会话信息被覆盖的问题。需要注意的是,本文讨论的是多个客户端级别上的多用户登录,而非同一个浏览器级别上的多用户登录。 ... [详细]
  • Java自带的观察者模式及实现方法详解
    本文介绍了Java自带的观察者模式,包括Observer和Observable对象的定义和使用方法。通过添加观察者和设置内部标志位,当被观察者中的事件发生变化时,通知观察者对象并执行相应的操作。实现观察者模式非常简单,只需继承Observable类和实现Observer接口即可。详情请参考Java官方api文档。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • Node.js学习笔记(一)package.json及cnpm
    本文介绍了Node.js中包的概念,以及如何使用包来统一管理具有相互依赖关系的模块。同时还介绍了NPM(Node Package Manager)的基本介绍和使用方法,以及如何通过NPM下载第三方模块。 ... [详细]
  • Hello.js 是一个用于连接OAuth2服务的JavascriptRESTFULAPI库,如Go ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • Windows 7 部署工具DISM学习(二)添加补丁的步骤详解
    本文详细介绍了在Windows 7系统中使用部署工具DISM添加补丁的步骤。首先需要将光驱中的安装文件复制到指定文件夹,并进行挂载。然后将需要的MSU补丁解压并集成到系统中。文章给出了具体的命令和操作步骤,帮助读者完成补丁的添加过程。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • 2018深入java目标计划及学习内容
    本文介绍了作者在2018年的深入java目标计划,包括学习计划和工作中要用到的内容。作者计划学习的内容包括kafka、zookeeper、hbase、hdoop、spark、elasticsearch、solr、spring cloud、mysql、mybatis等。其中,作者对jvm的学习有一定了解,并计划通读《jvm》一书。此外,作者还提到了《HotSpot实战》和《高性能MySQL》等书籍。 ... [详细]
  • (三)多表代码生成的实现方法
    本文介绍了一种实现多表代码生成的方法,使用了java代码和org.jeecg框架中的相关类和接口。通过设置主表配置,可以生成父子表的数据模型。 ... [详细]
  • Java 11相对于Java 8,OptaPlanner性能提升有多大?
    本文通过基准测试比较了Java 11和Java 8对OptaPlanner的性能提升。测试结果表明,在相同的硬件环境下,Java 11相对于Java 8在垃圾回收方面表现更好,从而提升了OptaPlanner的性能。 ... [详细]
  • http:ayufox.iteye.comblog655761管道通信转载于:https:www.cnblogs.comjvavap35 ... [详细]
author-avatar
风桥残岸_476
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有