Java实现支付宝之第三方支付宝即时到账支付功能

alipay 的几个内核功能文件:

AlipayFunction.java

package com.test.util.alipay;
import java.io.FileWriter;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
public class AlipayFunction {
/**
* 功能:生成签名结果
* @param sArray 要签名的数组
* @param key 安全校验码
* @return 签名结果字符串
*/
public static String BuildMysign(Map sArray, String key) {
String prestr = CreateLinkString(sArray); //把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串
prestr = prestr + key; //把拼接后的字符串再与安全校验码直接连接起来
String mysign = Md5Encrypt.md5(prestr);
return mysign;
}
/**
* 功能:除去数组中的空值和签名参数
* @param sArray 签名参数组
* @return 去掉空值与签名参数后的新签名参数组
*/
public static Map ParaFilter(Map sArray){
List keys = new ArrayList(sArray.keySet());
Map sArrayNew = new HashMap();
for(int i = 0; i < keys.size(); i++){
String key = (String) keys.get(i);
String value = (String) sArray.get(key);
if( value == null || value.equals("") ||
key.equalsIgnoreCase("sign") || key.equalsIgnoreCase("sign_type")){
continue;
}
sArrayNew.put(key, value);
}
return sArrayNew;
}
/**
* 功能:把数组所有元素排序,并按照“参数=参数值”的模式用“&”字符拼接成字符串
* @param params 需要排序并参与字符拼接的参数组
* @return 拼接后字符串
*/
public static String CreateLinkString(Map params){
List keys = new ArrayList(params.keySet());
Collections.sort(keys);
String prestr = "";
for (int i = 0; i < keys.size(); i++) {
String key = (String) keys.get(i);
String value = (String) params.get(key);
if (i == keys.size() - 1) {//拼接时,不包括最后一个&字符
prestr = prestr + key + "=" + value;
} else {
prestr = prestr + key + "=" + value + "&";
}
}
return prestr;
}
/**
* 功能:写日志,方便测试(看网站需求,也可以改成把记录存入数据库)
* @param sWord 要写入日志里的文本内容
*/
public static void LogResult(String sWord){
// 该文件存在于和应用服务器 启动文件同一目录下,文件名是alipay log加服务器时间
try {
FileWriter writer = new FileWriter("D:\\alipay_log" + System.currentTimeMillis() + ".txt");
writer.write(sWord);
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 功能:用于防钓鱼,调用接口query_timestamp来获取时间戳的处理函数
* 注意:远程解析XML出错,与服务器是否支持SSL等配置有关
* @param partner 合作身份者ID
* @return 时间戳字符串
* @throws IOException
* @throws DocumentException
* @throws MalformedURLException
*/
public static String query_timestamp(String partner)
throws MalformedURLException, DocumentException, IOException {
String strUrl = "https://mapi.alipay.com/gateway.do?service=query_timestamp&partner="+partner;
StringBuffer buf1 = new StringBuffer();
SAXReader reader = new SAXReader();
Document doc = reader.read(new URL(strUrl).openStream());
List<Node> nodeList = doc.selectNodes("//alipay/*");
for (Node node : nodeList) {
// 截取部分不需要解析的信息
if (node.getName().equals("is_success")
&& node.getText().equals("T")) {
// 判断是否有成功标示
List<Node> nodeList1 = doc.selectNodes("//response/timestamp/*");
for (Node node1 : nodeList1) {
buf1.append(node1.getText());
}
}
}
return buf1.toString();
}
} 

AlipayNotify.java

package com.test.util.alipay;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Map;
import com.test.constants.AlipayConfig;
public class AlipayNotify {
/**
* *功能:根据反馈回来的信息,生成签名结果
* @param Params 通知返回来的参数数组
* @param key 安全校验码
* @return 生成的签名结果
*/
public static String GetMysign(Map Params, String key){
Map sParaNew = AlipayFunction.ParaFilter(Params);//过滤空值、sign与sign_type参数
String mysign = AlipayFunction.BuildMysign(sParaNew, key);//获得签名结果
return mysign;
}
/**
* *功能:获取远程服务器ATN结果,验证返回URL
* @param notify_id 通知校验ID
* @return 服务器ATN结果
* 验证结果集:
* invalid命令参数不对 出现这个错误,请检测返回处理中partner和key是否为空
* true 返回正确信息
* false 请检查防火墙或者是服务器阻止端口问题以及验证时间是否超过一分钟
*/
public static String Verify(String notify_id){
//获取远程服务器ATN结果,验证是否是支付宝服务器发来的请求
String transport = AlipayConfig.transport;
String partner = AlipayConfig.partner;
String veryfy_url = "";
if(transport.equalsIgnoreCase("https")){
veryfy_url = "https://www.alipay.com/cooperate/gateway.do?service=notify_verify";
} else{
veryfy_url = "http://notify.alipay.com/trade/notify_query.do?";
}
veryfy_url = veryfy_url + "&partner=" + partner + "¬ify_id=" + notify_id;
String responseTxt = CheckUrl(veryfy_url);
return responseTxt;
}
/**
* *功能:获取远程服务器ATN结果
* @param urlvalue 指定URL路径地址
* @return 服务器ATN结果
* 验证结果集:
* invalid命令参数不对 出现这个错误,请检测返回处理中partner和key是否为空
* true 返回正确信息
* false 请检查防火墙或者是服务器阻止端口问题以及验证时间是否超过一分钟
*/
public static String CheckUrl(String urlvalue){
String inputLine = "";
try {
URL url = new URL(urlvalue);
HttpURLConnection urlConnection = (HttpURLConnection) url
.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(
urlConnection.getInputStream()));
inputLine = in.readLine().toString();
} catch (Exception e) {
e.printStackTrace();
}
return inputLine;
}
} 

AlipayService.java

package com.test.util.alipay;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class AlipayService {
/**
* 功能:构造表单提交HTML
* @param partner 合作身份者ID
* @param seller_email 签约支付宝账号或卖家支付宝帐户
* @param return_url 付完款后跳转的页面 要用 以http开头格式的完整路径,不允许加?id=123这类自定义参数
* @param notify_url 交易过程中服务器通知的页面 要用 以http开格式的完整路径,不允许加?id=123这类自定义参数
* @param show_url 网站商品的展示地址,不允许加?id=123这类自定义参数
* @param out_trade_no 请与贵网站订单系统中的唯一订单号匹配
* @param subject 订单名称,显示在支付宝收银台里的“商品名称”里,显示在支付宝的交易管理的“商品名称”的列表里。
* @param body 订单描述、订单详细、订单备注,显示在支付宝收银台里的“商品描述”里
* @param total_fee 订单总金额,显示在支付宝收银台里的“应付总额”里
* @param paymethod 默认支付方式,四个值可选:bankPay(网银); cartoon(卡通); directPay(余额); CASH(网点支付)
* @param defaultbank 默认网银代号,代号列表见club.alipay.com/read.php?tid=8681379
* @param encrypt_key 防钓鱼时间戳
* @param exter_invoke_ip 买家本地电脑的IP地址
* @param extra_common_param 自定义参数,可存放任何内容(除等特殊字符外),不会显示在页面上
* @param buyer_email 默认买家支付宝账号
* @param royalty_type 提成类型,该值为固定值:10,不需要修改
* @param royalty_parameters 提成信息集,与需要结合商户网站自身情况动态获取每笔交易的各分润收款账号、各分润金额、各分润说明。最多只能设置10条
* @param input_charset 字符编码格式 目前支持 GBK 或 utf-8
* @param key 安全校验码
* @param sign_type 签名方式 不需修改
* @param key 安全校验码
* @return 表单提交HTML文本
*/
public static String BuildForm(String partner,
String seller_email,
String return_url,
String notify_url,
String show_url,
String out_trade_no,
String subject,
String body,
String total_fee,
String paymethod,
String defaultbank,
String anti_phishing_key,
String exter_invoke_ip,
String extra_common_param,
String buyer_email,
String royalty_type,
String royalty_parameters,
String input_charset,
String key,
String sign_type,
String it_b_pay){
Map sPara = new HashMap();
sPara.put("service","create_direct_pay_by_user");
sPara.put("payment_type","1");
sPara.put("partner", partner);
sPara.put("seller_email", seller_email);
sPara.put("return_url", return_url);
sPara.put("notify_url", notify_url);
sPara.put("_input_charset", input_charset);
sPara.put("show_url", show_url);
sPara.put("out_trade_no", out_trade_no);
sPara.put("subject", subject);
sPara.put("body", body);
sPara.put("total_fee", total_fee);
sPara.put("paymethod", paymethod);
sPara.put("defaultbank", defaultbank);
sPara.put("anti_phishing_key", anti_phishing_key);
sPara.put("exter_invoke_ip", exter_invoke_ip);
sPara.put("extra_common_param", extra_common_param);
sPara.put("buyer_email", buyer_email);
sPara.put("royalty_type", royalty_type);
sPara.put("royalty_parameters", royalty_parameters);
sPara.put("it_b_pay", it_b_pay);
Map sParaNew = AlipayFunction.ParaFilter(sPara); //除去数组中的空值和签名参数
String mysign = AlipayFunction.BuildMysign(sParaNew, key);//生成签名结果
StringBuffer sbHtml = new StringBuffer();
List keys = new ArrayList(sParaNew.keySet());
String gateway = "https://www.alipay.com/cooperate/gateway.do?";
//GET方式传递
//sbHtml.append("<form id=\"alipaysubmit\" name=\"alipaysubmit\" action=\"" + gateway + "_input_charset=" + input_charset + "\" method=\"get\">");
//POST方式传递(GET与POST二必选一)
sbHtml.append("<form id=\"alipaysubmit\" name=\"alipaysubmit\" action=\"" + gateway + "_input_charset=" + input_charset + "\" method=\"post\">");
for (int i = 0; i < keys.size(); i++) {
String name = (String) keys.get(i);
String value = (String) sParaNew.get(name);
sbHtml.append("<input type=\"hidden\" name=\"" + name + "\" value=\"" + value + "\"/>");
}
sbHtml.append("<input type=\"hidden\" name=\"sign\" value=\"" + mysign + "\"/>");
sbHtml.append("<input type=\"hidden\" name=\"sign_type\" value=\"" + sign_type + "\"/>");
//submit按钮控件请不要含有name属性
sbHtml.append("<input type=\"submit\" value=\"支付宝确认付款\"></form>");
sbHtml.append("<script>document.forms['alipaysubmit'].submit();</script>");
return sbHtml.toString();
}
} 

Md5Encrypt.java

package com.test.util.alipay;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import com.test.constants.AlipayConfig;
/**
* 功能:支付宝MD5加密处理核心文件,不需要修改
* 版本:3.1
* 修改日期:2010-11-01
* 说明:
* 以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。
* 该代码仅供学习和研究支付宝接口使用,只是提供一个
* */
public class Md5Encrypt {
/**
* Used building output as Hex
*/
private static final char[] DIGITS = { '0', '1', '2', '3', '4', '5', '6',
'7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
/**
* 对字符串进行MD5加密
*
* @param text
* 明文
*
* @return 密文
*/
public static String md5(String text) {
MessageDigest msgDigest = null;
try {
msgDigest = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException e) {
throw new IllegalStateException(
"System doesn't support MD5 algorithm.");
}
try {
msgDigest.update(text.getBytes(AlipayConfig.input_charset)); //注意改接口是按照指定编码形式签名
} catch (UnsupportedEncodingException e) {
throw new IllegalStateException(
"System doesn't support your EncodingException.");
}
byte[] bytes = msgDigest.digest();
String md5Str = new String(encodeHex(bytes));
return md5Str;
}
public static char[] encodeHex(byte[] data) {
int l = data.length;
char[] out = new char[l << 1];
// two characters form the hex value.
for (int i = 0, j = 0; i < l; i++) {
out[j++] = DIGITS[(0xF0 & data[i]) >>> 4];
out[j++] = DIGITS[0x0F & data[i]];
}
return out;
}
} 

AlipayConfig.java这里是对账号,Key,回调连接地址等一些设置

package com.test.constants;
import java.util.Properties;
import com.test.util.PropertiesUtil;
public class AlipayConfig {
private static AlipayConfig alconfig = null;
private AlipayConfig(){
}
public static AlipayConfig getInstance(){
if(alconfig==null){
alconfig = new AlipayConfig();
}
return alconfig;
}
// 如何获取安全校验码和合作身份者ID
// 1.访问支付宝商户服务中心(b.alipay.com),然后用您的签约支付宝账号登陆.
// 2.访问“技术服务”→“下载技术集成文档”(https://b.alipay.com/support/helperApply.htm?action=selfIntegration)
// 3.在“自助集成帮助”中,点击“合作者身份(Partner ID)查询”、“安全校验码(Key)查询”
// ↓↓↓↓↓↓↓↓↓↓请在这里配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
// 合作身份者ID,以2088开头由16位纯数字组成的字符串
public static String it_b_pay = "1h";
public static String partner = "2088601003079118";
public static String service = "create_direct_pay_by_user";
// 交易安全检验码,由数字和字母组成的32位字符串
public static String key = "zxcdvxgksaam2zjrmv5cv0p4jqesaioh";
// 签约支付宝账号或卖家收款支付宝帐户
public static String seller_email = "test@yahoo.com.cn";
// 读配置文件
// notify_url 交易过程中服务器通知的页面 要用 http://格式的完整路径,不允许加?id=123这类自定义参数
public static String notify_url ="http:www.xxx.com/projectName/alipayTrade.action";
// 付完款后跳转的页面 要用 http://格式的完整路径,不允许加?id=123这类自定义参数
// return_url的域名不能写成http://localhost/js_jsp_utf8/return_url.jsp,否则会导致return_url执行无效
//public static String return_url = "http:www.xxx.com/projectName/alipayTrade.action";
// 网站商品的展示地址,不允许加?id=123这类自定义参数
public static String show_url = "http://www.alipay.com";
// 收款方名称,如:公司名称、网站名称、收款人姓名等
public static String mainname = "收款方名称";
// ↑↑↑↑↑↑↑↑↑↑请在这里配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
// 字符编码格式 目前支持 gbk 或 utf-8
public static String input_charset = "UTF-8";
// 签名方式 不需修改
public static String sign_type = "MD5";
// 访问模式,根据自己的服务器是否支持ssl访问,若支持请选择https;若不支持请选择http
public static String transport = "http";
} 

下面是一个简单的应用流程:

从JSP调用的就不说了,因为这也就只是传给后台你要买的东西是什么,价格多少等一些参数。
这里介绍一下后台处理的:

PaymentAction.java

/**
* 获取支付宝交易订单号
* @return
*/
public synchronized static String getOrderNum(){
Date date=new Date();
DateFormat df=new SimpleDateFormat("yyyyMMddHHmmssSSS");
return df.format(date);
}
protected HttpServletRequest getRequest() {
return ServletActionContext.getRequest();
}
//支付宝交易订单号
String orderNum = getOrderNum();
// 此次交易的总金额
getRequest().setAttribute("totalMoney","0.01");
//此次交易的订单号
getRequest().setAttribute("out_trade_no", orderNum);
//商品名称描述
getRequest().setAttribute("subject", "商品名称");
//这里省略了将此次订单信息存到数据库的流程 

alipay.jsp

<%@page import="com.test.constants.AlipayConfig"%>
<%@page import="com.test.util.alipay.UtilDate"%>
<%@page import="com.test.util.alipay.AlipayService"%>
<%
/*
功能:设置商品有关信息(入口页)
*详细:该页面是接口入口页面,生成支付时的URL
*版本:3.1
*日期:2010-11-01
*说明:
*以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。
*该代码仅供学习和研究支付宝接口使用,只是提供一个参考。
*************************注意*****************
如果您在接口集成过程中遇到问题,
您可以到商户服务中心(https://b.alipay.com/support/helperApply.htm?action=consultationApply),提交申请集成协助,我们会有专业的技术工程师主动联系您协助解决,
您也可以到支付宝论坛(http://club.alipay.com/read-htm-tid-8681712.html)寻找相关解决方案
要传递的参数要么不允许为空,要么就不要出现在数组与隐藏控件或URL链接里。
**********************************************
*/
%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>test</title>
<link rel="SHORTCUT ICON" href="favicon.ico">
<meta name="keywords" content="" />
<meta name="description" content="" />
<style type="text/css">
.font_content{
font-family:"宋体";
font-size:14px;
color:#FF6600;
}
.font_title{
font-family:"宋体";
font-size:16px;
color:#FF0000;
font-weight:bold;
}
table{
border: 1px solid #CCCCCC;
}
</style>
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-25469955-1']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
</head>
<%
//request.setCharacterEncoding("UTF-8");
//AlipyConfig.java中配置信息(不可以修改)
String input_charset = AlipayConfig.getInstance().input_charset;
String sign_type = AlipayConfig.getInstance().sign_type;
String seller_email = AlipayConfig.getInstance().seller_email;
String partner = AlipayConfig.getInstance().partner;
String key = AlipayConfig.getInstance().key;
String show_url = AlipayConfig.getInstance().show_url;
String notify_url = AlipayConfig.getInstance().notify_url;
String return_url = AlipayConfig.getInstance().return_url;
String it_b_pay = AlipayConfig.getInstance().it_b_pay;
///////////////////////////////////////////////////////////////////////////////////
//以下参数是需要通过下单时的订单数据传入进来获得
//必填参数
String out_trade_no = (String)request.getAttribute("out_trade_no");//请与贵网站订单系统中的唯一订单号匹配
//订单名称,显示在支付宝收银台里的“商品名称”里,显示在支付宝的交易管理的“商品名称”的列表里。
String subject = (String)request.getAttribute("subject");
//订单描述、订单详细、订单备注,显示在支付宝收银台里的“商品描述”里
String body = (String)request.getAttribute("body");
//订单总金额,显示在支付宝收银台里的“应付总额”里
String total_fee = (String)request.getAttribute("totalMoney");
//扩展功能参数——默认支付方式
// String pay_mode = request.getParameter("pay_bank");
String paymethod = ""; //默认支付方式,四个值可选:bankPay(网银); cartoon(卡通); directPay(余额); CASH(网点支付)
String defaultbank = ""; //默认网银代号,代号列表见http://club.alipay.com/read.php?tid=8681379
/*if(pay_mode.equals("directPay")){
paymethod = "directPay";
}
else{
paymethod = "bankPay";
defaultbank = pay_mode;
}*/
//扩展功能参数——防钓鱼
//请慎重选择是否开启防钓鱼功能
//exter_invoke_ip、anti_phishing_key一旦被设置过,那么它们就会成为必填参数
//开启防钓鱼功能后,服务器、本机电脑必须支持远程XML解析,请配置好该环境。
//建议使用POST方式请求数据
String anti_phishing_key = ""; //防钓鱼时间戳
String exter_invoke_ip= ""; //获取客户端的IP地址,建议:编写获取客户端IP地址的程序
//如:
//anti_phishing_key = AlipayFunction.query_timestamp(partner); //获取防钓鱼时间戳函数
//exter_invoke_ip = "202.1.1.1";
//扩展功能参数——其他
String extra_common_param = ""; //自定义参数,可存放任何内容(除=、&等特殊字符外),不会显示在页面上
String buyer_email = "137672927"; //默认买家支付宝账号
String extend_param = "";
//扩展功能参数——分润(若要使用,请按照注释要求的格式赋值)
String royalty_type = ""; //提成类型,该值为固定值:10,不需要修改
String royalty_parameters ="";
//提成信息集,与需要结合商户网站自身情况动态获取每笔交易的各分润收款账号、各分润金额、各分润说明。最多只能设置10条
//各分润金额的总和须小于等于total_fee
//提成信息集格式为:收款方Email_1^金额1^备注1|收款方Email_2^金额2^备注2
//如:
//royalty_type = "10"
//royalty_parameters = "111@126.com^0.01^分润备注一|222@126.com^0.01^分润备注二"
//之前设置的1h将返回
//错误描述: 抱歉,商户没有开通自定义超时权限,请联系您的商家。
//错误代码: SELF_TIMEOUT_NOT_SUPPORT
it_b_pay="";
//构造函数,生成请求URL
String sHtmlText = AlipayService.BuildForm(partner,seller_email,return_url,notify_url,show_url,out_trade_no,
subject,body,total_fee,paymethod,defaultbank,anti_phishing_key,exter_invoke_ip,extra_common_param,buyer_email,
royalty_type,royalty_parameters,input_charset,key,sign_type,it_b_pay);
%>
<body>
<table align="center" width="350" cellpadding="5" cellspacing="0">
<tr>
<td align="center" class="font_title" colspan="2">订单确认</td>
</tr>
<tr>
<td class="font_content" align="right">订单号:</td>
<td class="font_content" align="left"><%=out_trade_no%></td>
</tr>
<tr>
<td class="font_content" align="right">付款总金额:</td>
<td class="font_content" align="left"><%=total_fee%></td>
</tr>
<tr>
<td align="center" colspan="2"><%=sHtmlText%></td>
</tr>
</table>
</body>
</html> 

支付宝回调的接口:AlipayNotify.java

package com.test.action.payment;
import java.util.Date;
import java.util.List;
import com.test.action.base.BaseAction;
import com.test.dao.model.paymentcenter.OrderForm;
import com.test.dao.model.paymentcenter.OrderList;
import com.test.dao.model.paymentcenter.UserPurview;
public class AlipayNotify extends BaseAction {
private static final long serialVersionUID = 1L;
private String buyer_email;
private long buyer_id;
private String exterface;
private String is_success;
private String notify_id;
private String notify_time;
private String notify_type;
private String out_trade_no;
private String payment_type;
private String seller_email;
private long seller_id;
private String subject;
private float total_fee;
private String trade_no;
private String trade_status;
private String sign;
private String sign_type;
private OrderForm of;
//……这里省去了get和set方法
………………………………………………………………
// 处理支付宝传过来的参数信息
public String alipayTrade() throws Exception {
if (this.is_success.equalsIgnoreCase("T")
&& "TRADE_SUCCESS".equalsIgnoreCase(this.trade_status)) {
of = (OrderForm) orderFormService
.findOrderFormsByOut_trade_no(this.out_trade_no);
if (of != null) {
of.setTradeStatus(1);
of.setTradeNo(this.trade_no);
of.setNotifyTime(new Date());
orderFormService.updateOldModel(of); // 更新
List<OrderList> orderList = orderListService
.findOrderFormsByOutTradeNo(this.out_trade_no);
for (OrderList ol : orderList) {
//这里省去了处理订单逻辑代码……………………
}
}
//回调成功之后,给支付宝返回一个 "success" 字符就可以了
return SUCCESS;
}
return "failure";
}
} 

就这样,支付宝的第三方即时到账接口就算实现了。

以上所述是小编给大家介绍的Java实现支付宝之第三方支付宝即时到账支付功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • 详解java集成支付宝支付接口(JSP+支付宝20160912)

    吐槽一下: 支付宝的接口和微信的DEMO和文档真心太难看懂了,乱七八糟,都不知道去哪里找自己要的东西,最近几天我们公司需要做类似的开发,我作为先锋,率先解决Java集成支付宝支付和微信支付接口工作. 我们的工作环境:JSP网站+支付接口,目前工作的支付宝接口为20160912,微信为V3版本,如遇到版本升级,请联系相关机构的客户服务人员升级. 本文介绍JSP+支付宝接口,本文非原创. 新手注意: 1.本文使用的接口地址和参数为沙箱的地址,无论你在使用沙箱或者正式地址,务必核实使用接口地址和参数,

  • java支付宝即时到帐提交订单功能

    本文实例为大家分享了java支付宝即时到帐提交订单的具体代码,供大家参考,具体内容如下 package com.tian.batis; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; im

  • Java实现支付宝之第三方支付宝即时到账支付功能

    alipay 的几个内核功能文件: AlipayFunction.java package com.test.util.alipay; import java.io.FileWriter; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.Collections; import ja

  • springboot+vue+对接支付宝接口+二维码扫描支付功能(沙箱环境)

    1. 什么是支付宝接口(沙箱环境)? 记录时间:2020年10月15日3:55 现如今,手机支付已相当普遍,而作为开发人员应该对手机支付操作有所了解.而支付宝接口是支付宝提供的一个接口,用来对接软件应用程序在进行金钱交易使用.然后对于编程爱好者而言,想学习这一点就有点难,因为要想使用支付宝接口,必须前提是使用软件应用程序,软件应用程序需要向支付宝申请,提交一系列资料,这一点是实现不了的.这就对开发者增加了一定的难度,因为产品没有上线,然后需要对接支付宝接口就是很大的问题,所以出现了沙箱环境,具有

  • java实现在SSM下使用支付宝扫码支付功能

    本文实例为大家分享了java使用支付宝扫码支付的具体代码,供大家参考,具体内容如下 准备工作 首先开通支付宝沙箱的测试账号,里面会有消费者账户和收款方账户 手机扫码下载手机端app 基础配置 所需jar包 AlipayConfig package com.alipay.config; import java.io.FileWriter; import java.io.IOException; import java.util.ResourceBundle; /* * *类名:AlipayConf

  • thinkPHP框架对接支付宝即时到账接口回调操作示例

    本文实例讲述了thinkPHP框架对接支付宝即时到账接口回调操作.分享给大家供大家参考,具体如下: 关于支付宝即时收款接口的对接过程,很简单,也有很多人发过,我这里就不在啰嗦了,对接完成后,在线支付成功后的回调,相对来说,是个难点,,我重点分享下我的经验. 我在开发二代旅游CMS(http://www.erdaicms.com)的时候,在回调的时候,也花了不少时间. 不管是支付宝接口好是微信支付接口,回调都分为跳转回调和异步通知回调,跳转回调是不保险的,加入客人支付完成后马上把支付页面关闭,没跳

  • PHP实现支付宝即时到账功能

    本文实例为大家分享了PHP支付宝即时到账功能的实现代码,供大家参考,具体内容如下 首先需要下载即时到账交易接口,传送门https://doc.open.alipay.com/doc2/detail?treeId=62&articleId=103566&docType=1 选择(create_direct_pay_by_user) 然后解压,选择MD5签名版本的文件 此文件夹里有个叫create_direct_pay_by_user-PHP-UTF-8的文件,我们就用这个文件~ 接着打开文件

  • PHP 接入支付宝即时到账功能

    首先请到支付宝那边申请一个及时到账的接口账户,需要提交相关材料申请.然后根据即时到账的API文档进行接入.API文档提供了各种语言版本的demo,我这里是下的php版demo,然后再进行相关修改操作.你也可以将demo版本的代码重新整合,我这里暂时为了走通充值及时到账流程,就不进行代码重构了. API文档:https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7386797.0.0.eZb8FX&treeId=108&articleId=10

  • Java接入支付宝授权第三方登录的完整步骤

    开发前准备 支付宝开发平台. 支付宝沙箱环境申请使用 !!!重点 授权回调地址必须要写全路径也就是controller最终路径(下面有具体细节) RSA2的密钥生成: 支付宝提供生成密钥地址. 获取用户授权 生成唤起支付宝授权连接 用到appid+回调路径 回调路径=在上面配置的全路径 具体路径: https://openauth.alipay.com/oauth2/publicAppAuthorize.htm? app_id=2016####&scope=auth_user&edirec

  • java 商户PC端接入支付宝支付的实现方法

    用户在商户网站上完成支付一.商户申请流程和业务场景即时到账:网上交易时,买家的交易资金直接打入卖家支付宝账户,快速回笼交易资金.申请条件: 1) 申请前必须拥有经过实名认证的支付宝账户: 2) 企业或个体工商户可申请: 3) 需提供真实有效的营业执照,且支付宝账户名称需与营业执照主体一致: 4) 网站能正常访问且页面显示完整,网站需要明确经营内容且有完整的商品信息: 5) 网站必须通过ICP备案.如为个体工商户,网站备案主体需要与支付宝账户主体名称一致: 6) 如为个体工商户,则团购不开放,且古

  • 微信、支付宝二码合一扫码支付实现思路(java)

    一.支付二维码(预订单) 根据需要购买的信息创建预订单,将订单信息保存到Redis中,并设置有效期,注意生产二维码的链接后的参数可以关联到Redis中的key: QRCode  为servlet扫码请求的URL: UUIDUtils.getUUID()  为预订单单号,在servlet请求中截取,然后在Redis中查找对应的Key的数据: 二维码地址:http://kung900519.qicp.io/interface/QRCode/UUIDUtils.getUUID(): 二.创建二维码扫码

  • Java spring boot 实现支付宝支付功能的示例代码

    一.准备工作: 1.登陆支付宝开发者中心,申请一个开发者账号. 地址:https://openhome.alipay.com/ 2.进入研发服务: 3.点击链接进入工具下载页面: 4.点击下载对应版本的RSA公钥生成器: 5.生成公钥密钥(记录你的应用私钥): 6.在支付宝配置公钥(点击保存): 二.搭建demo 1.引入jia包: <dependency> <groupId>com.alipay.sdk</groupId> <artifactId>alip

随机推荐