支付宝手机网页即时到账接口(3)之交易接口请求

前言

这篇文章主要讲诉系统调用支付宝手机网页即时到账交易接口跳转到支付宝收银台。

上篇文章地址:支付宝手机网页即时到账接口(2)之授权接口请求

这是第一篇文章结尾调用交易接口的图解。

交易接口请求参数说明

1.含义

  • 请求参数是商户在与支付宝进行数据交互时,提供给支付宝的请求数据,以便支付宝根据这些数据进一步处理。

2.交易接口请求参数列表

从上面的图片可以看到参数比较多,这边简单介绍下(注:下面没有写出字符长度)。

  • service=alipay.wap.auth.authAndExecute

    • 授权接口名称(固定)
  • format=xml
    • 请求参数固定
  • v=2.0
    • 接口版本号(固定)。注当前版本,以后说不定会更新
  • partner=2088000000000000
    • 合作者身份ID(开通支付宝商家服务后,支付宝会提供)
  • req_id=20150512203545
    • 请求号(必须唯一,可以用当前时间)
  • sec_id=MD5
    • 签名方式(MD5、0001(RSA))。本篇是用MD5
  • sign=VRVr7adPfsHblFjiBkGWryhKI
    • 对请求或响应中参数签名后的值。
  • req_data
    • 示例
  • <auth_and_execute_req>
    	<request_token>201008309e298cf01c58146274208eda1e4cdf2b</request_token>
    </auth_and_execute_req>

3.样例

http://wappaygw.alipay.com/service/rest.htm?req_data=<auth_and_execute_req><request_token>201008309e298cf01c58146274208eda1e4cdf2b</request_token></auth_and_execute_req>&service=alipay.wap.auth.authAndExecute&sec_id=0001&partner=2088101000137799&sign=LdXbwMLug8E4UjfJMuYv2KoD5X5F3vHGQsQbZ/rdEQ3eaN4FPal7rhsbZZ/+ZUL1kAKzTQSDdMk87MEWtWO1Yq6rhnt2Tv8Hh6Hb16211VXKgbBCpq861+LopRwegPbGStcwBuAyE4pi6fYlJ6gxzL4tMyeLe+T5XZ0RKRUk00U=&format=xml&v=2.0

代码示例

交易bean

public class AlipayTrade {

	//接口名称
	private final static String service = "alipay.wap.auth.authAndExecute";

	//请求格式参数格式
	private final static String format = "xml";

	//接口版本号
	private final static String v = "2.0";

	//合作者身份id
	public String partner = "2088000000000000";//填写从支付宝得到的id  

	//签名方式
	private final static String secId = "MD5";

	//签名
	private String sign;

	//业务参数
	//请求业务参数
	private String reqData;

	private String inputCharset = "utf-8";

	//授权令牌
	private String requestToken;

	private String key = "";

	public String getKey() {
		return key;
	}

	public void setKey(String key) {
		this.key = key;
	}

	public String getRequestToken() {
		return requestToken;
	}

	public void setRequestToken(String requestToken) {
		this.requestToken = requestToken;
		this.reqData = "<auth_and_execute_req><request_token>" + requestToken + "</request_token></auth_and_execute_req>";
	}

	public String getService() {
		return service;
	}

	public String getFormat() {
		return format;
	}

	public String getInputCharset() {
		return inputCharset;
	}

	public void setInputCharset(String inputCharset) {
		this.inputCharset = inputCharset;
	}

	public String getV() {
		return v;
	}

	public String getPartner() {
		return partner;
	}

	public String getSecId() {
		return secId;
	}

	public String getSign() {
		return sign;
	}

	public String getReqData() {
		return reqData;
	}

	public void setSign(String sign) {
		this.sign = sign;
	}

}

将交易信息输出到页面中

public AlipayTrade trade(String token){

	AlipayTrade alipayTrade = new AlipayTrade();
	alipayTrade.setRequestToken(token);//设置token
	//2.获取sign签名
	Map<String, String> param2 = getTradeParam(alipayTrade);
	// 拼接后字符串
	String prestr2 = AliPayUtils.createLinkString(param2);
	alipayTrade.setSign(getSign(prestr2, alipayTrade.getKey(), alipayTrade.getInputCharset()));
	return alipayTrade;
}

getTradeParam(alipayTrade)代码块

private static Map<String, String> getTradeParam(AlipayTrade alipayTrade) {
		Map<String, String> param = new HashMap<String, String>();
		param.put("service", alipayTrade.getService());
		param.put("partner", alipayTrade.getPartner());
		param.put("_input_charset", alipayTrade.getInputCharset());
		param.put("sec_id", alipayTrade.getSecId());
		param.put("format", alipayTrade.getFormat());
		param.put("v", alipayTrade.getV());
		param.put("req_data", alipayTrade.getReqData());
		return AliPayUtils.paraFilter(param);
}

工具类PayUtils.paraFilter(param)

  • 去掉空值与签名后的新签名参数组

public static Map<String, String> paraFilter(Map<String, String> sArray) {

        Map<String, String> result = new HashMap<String, String>();

        if (sArray == null || sArray.size() <= 0) {
            return result;
        }

        for (String key : sArray.keySet()) {
            String value = sArray.get(key);
            if (value == null || value.equals("") || key.equalsIgnoreCase("sign")
                || key.equalsIgnoreCase("sign_type")) {
                continue;
            }
            result.put(key, value);
        }

        return result;
    }

工具类PayUtils.createLinkString(param)

  • 把数组所有元素排序,并按照“参数=参数值”的模式用“&”字符拼凑成字符串

public static String createLinkString(Map<String, String> params) {

        List<String> keys = new ArrayList<String>(params.keySet());
        Collections.sort(keys);

        String prestr = "";

        for (int i = 0; i < keys.size(); i++) {
            String key = keys.get(i);
            String value = params.get(key);

            if (i == keys.size() - 1) {//拼接时,不包括最后一个&字符
                prestr = prestr + key + "=" + value;
            } else {
                prestr = prestr + key + "=" + value + "&";
            }
        }

        return prestr;
    }

代码块getSign(prestr, alipayAuth.getKey(), alipayAuth.getInputCharset())

    • 签名字符串
private static String getSign(String text, String key, String input_charset) {
        text = text + key;
        return DigestUtils.md5Hex(getContentBytes(text, input_charset));
    }  

交易页面

<%@page language="java" contentType="text/html; charset=utf-8"
	pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
	</head>
	<body>
		<form id="alipaysubmit" name="alipaysubmit" action="http://wappaygw.alipay.com/service/rest.htm?_input_charset=${trade.inputCharset}" method="get">
			<input type="hidden" name="sign" value="${trade.sign}"/>
			<input type="hidden" name="sec_id" value="${trade.secId}"/>
			<input type="hidden" name="v" value="${trade.v}"/>
			<input type="hidden" name="_input_charset" value="${trade.inputCharset}"/>
			<input type="hidden" name="req_data" value="${trade.reqData}"/>
			<input type="hidden" name="service" value="${trade.service}"/>
			<input type="hidden" name="partner" value="${trade.partner}"/>
			<input type="hidden" name="format" value="${trade.format}"/>
			<input type="submit" value="确认" style="display:none;">
		</form>
		<script>document.forms['alipaysubmit'].submit();</script>
	</body>
</html>

授权接口请求参数说明

1.含义

时间: 2024-10-18 08:02:27

支付宝手机网页即时到账接口(3)之交易接口请求的相关文章

支付宝手机网页即时到账接口(2)之授权接口请求

前言 这篇文章主要讲诉系统调用支付宝手机网页即时到账授权接口获取支付宝返回的request_token. 上篇文章地址:支付宝手机网页即时到账接口(1)之相关信息介绍. 这是上篇文章结尾调用授权接口的图解. 官方文档中对授权接口的说明是: 商户利用编程方法来模拟http请求远程解析html,获取支付宝返回的结果数据后,可以结合自身网站的业务逻辑进行数据处理. 说明中不难看出我们的代码中需要模拟http提交参数,然后解析支付宝返回的结果再进行处理.该项目是用java编写的,所以后续代码也是用jav

Alipay Wap (Mobile) Payment 支付宝手机网页即时到账(For OpenCa

目前OpenCart2.0.0.0以来的前后台均为移动设备方便访问,支付宝方面单独针对移动设备访问网站设立了支付接口,普通的支付宝即时到账接口无法在手机网页上正常支付 本支付插件是支付宝手机网页即时到账接口,在 OpenCart 2.0.x版本测试成功! 本插件需要解决生成商家公钥和私钥等,以及与支付宝方面的技术接洽,请与我联系获取此免费技术支持. My Email: [email protected] 主要功能: 1. 针对有资格申请支付宝手机网页即时到账的中国国内公司商家设计使用: 2. 可

支付宝手机网页即时到账接口(5)之交易接口页面跳转同步通知

前言 这篇文章主要讲诉系统调用支付宝手机网页即时交易接口后支付宝返回的同步通知. 支付宝对商户的请求数据处理完成后,会将处理的结果数据通过系统程序控制客户端页面自动跳转的方式通知给商户网站.这些处理结果数据就是页面跳转同步通知参数.支付宝以GET方式访问商户网站(参数call_back_url,在"手机网页即时到账授权接口(alipay.wap.trade.create.direct)"中指定). html同步返回特性 支付宝处理完请求的数据后,当前界面会自动刷新,立刻显示处理结果:

支付宝手机网页即时到账接口(4)之交易接口服务器异步通知

前言 这篇文章主要讲诉系统调用支付宝手机网页即时交易接口后支付宝返回的异步通知. 支付宝对商户的请求数据处理完成后,会将处理的结果数据通过服务器主动通知的方式通知给商户网站.这些处理结果数据就是服务器异步通知参数. 特性 必须保证服务器异步通知页面(notify_url)上无任何字符,如空格.HTML标签.开发系统自带抛出的异常提示信息或错误页面等. 支付宝是用POST方式发送通知信息,因此该页面中获取参数的方式,如: request.Form("out_trade_no").$_PO

支付宝手机网页即时到账接口(1)之相关信息介绍

前言 博主近几周在写一个微商城的项目,里面有涉及到付款模块,发现原来电脑端的支付宝接口与手机端的接口不一致(原来的电脑端平台非本人开发).然后便去支付宝商家服务下载集成开发包. 该集成开发包包含即时到账批量退款有密接口.商户接入支付宝收银台界面展示标准-无线和手机网页即时到账接口三个文件夹. 1.即时到账批量退款有密接口 demo 该文件夹下有8个示例项目,分为4种不同语言(ASP.CSHARP.JAVA.PHP)和2种不同编码(GBK.UTF-8) 更新日志 即时到账批量退款有密接口(refu

支付宝手机网页支付即时到账接口

mycncart的前后台均为移动设备方便访问,支付宝方面单独针对移动设备访问网站设立了支付接口,普通的支付宝即时到账接口无法在手机网页上正常支付 本支付插件是支付宝手机网页即时到账接口. 本插件需要解决生成商家公钥和私钥等,以及与支付宝方面的技术接洽,请与我联系获取此免费技术支持. 主要功能: 1. 针对有资格申请支付宝手机网页即时到账的中国国内公司商家设计使用: 2. 可设置最低启用金额; 3. 可设置适用的国家和地区用户; 4. 设定相关订单状态: 5. 当支付款项成功时,支付宝将相关操作异

支付宝手机网页支付

本节主要描写叙述支付宝手机站点支付,开发网址:productId=2013080604609688" target="_blank">https://b.alipay.com/order/productDetail.htm?productId=2013080604609688,光找这个找了半天,呵呵 在网页中部有四个标签页,选择"技术集成",下载集成开发包,里面有相关的技术文档和三种语言的代码演示样例.代码演示样例中差点儿集成了全部的代码逻辑.cli

【android仿系列进阶篇】android 支付宝手机网页支付

最近在做android-,恩,就说这么多吧 1,准备工作 支付宝相关文档下载地址:https://b.alipay.com/order/productDetail.htm?productId=2013080604609688&tabId=4#ps-tabinfo-hash 当然了,假设你已经有了pid(partner)和商户账户(seller),并且开通了手机网页支付功能. 下载的包里面,打开[手机网页即时到账接口]文件夹,看到里面的可以看看里面的pdf文档,[手机网页支付接入与使用规则.pdf

用MVC做支付宝手机网页支付问题

支付宝支付接口手机网页支付 从官网扒下来的demo阿里做得还是相当不错的,只要参数改正确了基本上都是能跑通,WebForm的没什么大问题,这次要讲的主要是几个要注意的问题,因为是用MVC来做. 1.要确宝手机网页支付开通已经申请通过,具体官网都有介绍. 2.支付宝的同步请求是正常接收到了的,但支付宝支付接口异步通知 AliPaynotify却没有接收到任何返回的信息,这里 支付宝的异步通知其实被 asp.net 的安全机制给拦截了,返回给支付宝的500错误信息是 A potentially da