Java实现支付宝之第三方支付宝即时到账支付功能_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实现支付宝之第三方支付宝即时到账支付功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索第三方支付实现原理、java实现第三方支付、第三方支付的实现原理、第三方即时通讯、第三方即时通讯哪个好,以便于您获取更多的相关知识。

时间: 2024-10-28 22:03:49

Java实现支付宝之第三方支付宝即时到账支付功能_java的相关文章

java实现微信支付功能开发实例

管理关于微信支付文档 https://pay.weixin.qq.com/wiki/doc/api/index.html 微信支付普通商户接入支持四种支付方式 刷卡支付 用户打开微信钱包的刷卡的界面,商户扫码后提交完成支付 公众号支付 用户在微信内进入商家H5页面,页面内调用JSSDK完成支付 扫码支付 用户打开"微信扫一扫",扫描商户的二维码后完成支付 APP支付 商户APP中集成微信SDK,用户点击后跳转到微信内完成支付 这里我们来看公众号支付 公众号支付开发步骤 1.设置测试目录

PHP实现支付宝即时到账功能_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的文件,我们就用这个文件~ 接着打开文件

交互设计:支付宝即时到账交易确认付款页面的交互设计

因为昨天被支付宝强行关闭了"余额支付",所以一笔钱没有完成付款,刚刚来公司的时候,登录web去付款,体验了一下新设计的"即时到账交易付款确认页面",我觉得在交互设计上,存在几个问题,找茬一把. 在上图片前,还是要说,这一次的支付宝改版是不错的,最大的优点是更加的专注和简洁.好了.恭维的说完,就开始找茬: 看上图,上面的1,2,3 各自区域,是我眼睛注释的顺序,我先看到1,觉得没有我需要确认的信息,然后看2,也没有看到我需要的信息,然后看到了3,发现25写的很大,而我

我的订单-支付宝 即时到账交易接口接 问题

问题描述 支付宝 即时到账交易接口接 问题 我知道 即时到账交易接口接 在付款成功后会返回我自己网站的一个网页,官方的案例是return_url.php 返回这个网页,然后我在这个页面做处理,把付款记录写入数据库.但当用户在支付宝上付款后,没有等待跳转回自己的网页,这样的话我没办法操作,把付款信息写入数据库.请问有什么接口?可以让我之后再去查询我的订单交易状态吗? 解决方案 是我自己没透彻理解到api的原理,现在解决了,用notify_url 这个就好 解决方案二: 支付宝即时到账接口 解决方案

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

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

一个网站里面能不能同时添加支付宝的即时到账和手机网站支付两种支付方式

问题描述 一个网站里面能不能同时添加支付宝的即时到账和手机网站支付两种支付方式 一个网站里面能不能同时添加支付宝的即时到账和手机网站支付两种支付方式,我把手机支付的页面和电脑支付的页面写在了一个网站里面.现在手机支付做好了,但是即时到账给的接口和手机支付的不一样..

PHP 接入支付宝即时到账功能_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

支付宝即时到账接口集成

问题描述 支付宝即时到账接口集成4.1集成L@AZ`1[ATI]LXT`T)E[%]`{`N.png1.合作者身份ID(partner).交易安全校验码(key)需要登录www.alipay.com,点击"商家服务"栏目,在该界面中获得.此查询操作需要签约的支付宝账号.登录密码.支付密码.2.配置即时到账接口.需要配置的文件有$@Q{B`2QMM{)]8683T89[RK.png4.2测试1.单独测试即时到账接口(详细可见3测试):2.结合商户的完整业务逻辑测试整个流程:登录→购买下单

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的文件,我们就用这个文件~ 接着打开文件