java调用爱贝支付

这篇博客详细介绍了如何使用Java调用爱贝支付接口,包括下单获取transid的流程、接口说明、数据签名算法以及具体的代码实现,涵盖了RSA、Base64和HTTP请求等相关技术。
摘要由CSDN通过智能技术生成

目录

1.爱贝支付流程

2.接口说明

2.1下单-获取transid

2.2返回参数及格式

3.代码实现

3.1项目结构

3.2OrderMain 

3.3OrderTest 

3.4RSA

3.5Base64

3.6HttpUtils

3.7IpayConfig

3.8GetData


 

爱贝支付是之前公司用的,一款集微信,支付宝,银联的第三方支付工具。做个笔记复习一下

 

1.爱贝支付流程

 

2.接口说明

接口均采用http协议,POST方法。

数据传输的时候参数值需要进行urlencode,urlencode规则使用application/x-www-form-urlencoded方式,即空格” ”会被编码成加号”+”。进行urlencode编码时,中文字符采用UTF-8编码。

请求和应答参数均为transdata、sign、signtype。transdata为具体业务参数,数据格式为json格式;sign为transdata的签名数据;signtype为签名算法类型,目前只支持RSA算法。具体呈现方式为transdata=xxxx&sign=yyyy&signtype=RSA,其中yyyy就是对xxxx的签名数据,yyyy=rsa(md5(xxxx))。采用RSA MD5数字签名算法,私钥签名、公钥验签。和Java里面的MD5WithRSA算法一致。

商户需要以应用私钥对请求数据进行签名、使用平台公钥对应答数据进行验签。错误应答无须验签。

2.1.下单-获取transid

请求URL:https://cp.iapppay.com/payapi/order

请求格式示例:https://cp.iapppay.com/payapi/order?transdata=urlencode(xxx)&sign=urlencode(yyy)&signtype=RSA

urlencode前内容:https://cp.iapppay.com/payapi/order?transdata={"appid":"123","waresid":1,"cporderid":"22222","price":1.00,"currency":"RMB","appuserid":"test","notifyurl":"http://www.iapppay.com/test"}&sign=xxxxxx&signtype=RSA

 

 

2.2返回参数及格式

成功应答数据样例(urlencode前内容):transdata={"transid":"11111"}&sign=xxxxxx&signtype=RSA

成功应答参数说明:

失败应答数据样例(urlencode前内容):transdata={"code":"1001","errmsg":"签名验证失败"}

失败应答参数列表:

 

3.代码实现

3.1项目结构

3.2OrderMain 

package Test;

import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;

import util.HttpUtils;
import util.IpayConfig;
import util.RSA;
import net.sf.json.JSONObject;

public class OrderMain {
	/**
	 * 1.封装下单请求数据
	 * @param appid 
	 * @param waresid 商品编号
	 * @param waresname 商品名称
	 * @param cporderid 商户订单号
	 * @param price 支付金额-可选
	 * @param appuserid 唯一标识-1#23
	 * @param cpprivateinfo 商户私有信息-可选
	 * @param notifyurl 支付结果通知地址-可选
	 * @return
	 */
	public static String ReqData(String appid, int waresid,String waresname,String cporderid ,float price,String appuserid,String cpprivateinfo,String notifyurl) {
		
		JSONObject jsonObject = new JSONObject();
		jsonObject.put("appid", appid);
		//商品编号
		jsonObject.put("waresid", waresid);
		//商户订单号
		jsonObject.put("cporderid", cporderid);
		//货币类型-RMB
		jsonObject.put("currency", "RMB");
		//唯一标识-1#23
		jsonObject.put("appuserid", appuserid);
		//商品名称-可选
		if(!waresname.isEmpty()){
			jsonObject.put("waresname", waresname);
		}
		//支付金额-可选
		jsonObject.put("price", price);
		//商户私有信息-可选
		if(!cpprivateinfo.isEmpty()){
			jsonObject.put("cpprivateinfo", cpprivateinfo);
		}
		//支付结果通知地址-可选
		if(!notifyurl.isEmpty()){
			jsonObject.put("notifyurl", notifyurl);
		}
		
		//1.请求参数
		String transdata = jsonObject.toString();// 组装成 json格式数据
		//2.sign签名数据
		String sign = RSA.sign(transdata, IpayConfig.PRIVATE_KEY, "utf-8");
		//3.url
		//String url = "https://cp.iapppay.com/payapi/order?";
		//post数据
		String data = "transdata=" + transdata + "&sign=" + sign+ "&signtype=RSA";// 组装请求参数		//System.out.println("下单数据:"+data);
		System.out.println("1.post数据:"+data);
		return data;
	}
	
	/**
	 * 2.请求过程,返回流水单号
	 * @param reqData
	 * @return
	 */
	public static String GetTransid(String reqData){
//		System.out.println(reqData);
		String url = "https://cp.iapppay.com/payapi/order";
		//调用Http的post方法,发送请求数据
		String respData = HttpUtils.sentPost(url, reqData);
		System.out.println("2.响应数据:"+respData);

		//参数操作
		String[] dataArray = respData.split("&");
		 Map<String, String> reslutMap = new HashMap<String, String>();
		 for (String s : dataArray) {
	            if (s.startsWith("transdata")) {
	                reslutMap.put("transdata", s.substring(s.indexOf("=") + 1, s.length()));
	            } else if (s.startsWith("signtype")) {
	                reslutMap.put("signtype", s.substring(s.indexOf("=") + 1, s.length()));
	            } el
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值