微信对账单返回值解析,java,求大神指导

xiong3837 2016-09-21 05:05:34
通过调用微信对账接口返回结果,但是微信返回的是字符串,怎么处理这个字符串然后存到数据啊
需要对应好每一个字段


https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_6
这是开发文档,求大神支招如何解析这个字符串,膝盖已经准备好了
...全文
2069 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
xxbby0 2019-04-18
  • 打赏
  • 举报
回复
你微信,QQ多少,能加一下 互相学习一下吗(664133494qq)
tzwhyqq 2017-07-19
  • 打赏
  • 举报
回复
我的是asp.net 的 java 里面应该也有对应的类,去微信里面返回的是行数据,按行去分割就好。
tzwhyqq 2017-07-19
  • 打赏
  • 举报
回复
不用那么麻烦 几句话就好了。 //获取对账单 string str = WeChatOrderHelper.DownloadBill("", new DateTime(2017, 7, 12),"ALL"); //数据里面是每一行的数据 自己再根据,' 去分割就好。 string[] ContentLines = str.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
东拐 2016-10-12
  • 打赏
  • 举报
回复
如果需要处理后面的数据
可以String listStr = "";
String objStr = "";
if(responseResult.indexOf("总交易单数")>=0){
listStr = responseResult.substring(0, responseResult.indexOf("总交易单数"));
objStr = responseResult.substring(responseResult.indexOf("总交易单数"));
}
截断成两段,然后用楼上的方法处理数据
xiong3837 2016-09-29
  • 打赏
  • 举报
回复

4楼你好,微信对账单最后两行有个统计数据

控制台打印效果


这里需要做下特殊处理,这个是我在你的基础上加了一点优化,感谢你提供的意见

public static void main(String[] args) throws Exception {
String str = getDownloadbill();// 获取对账报文
String newStr = str.replaceAll(",", " "); // 去空格
String[] tempStr = newStr.split("`"); // 数据分组
String[] t = tempStr[0].split(" ");// 分组标题
int k = 1; // 纪录数组下标
int j = tempStr.length / t.length; // 计算循环次数
for (int i = 0; i < j; i++) {
for (int l = 0; l < t.length; l++) {
/*********************** 我添加的开始 ***********************/
//如果是最后列且是最后一行数据时,去除数据里的汉字
if((i == j - 1) && (l == t.length -1)){
String reg = "[\u4e00-\u9fa5]";//汉字的正则表达式
Pattern pat = Pattern.compile(reg);
Matcher mat=pat.matcher(tempStr[l + k]);
String repickStr = mat.replaceAll("");
System.out.println(t[l] + ":" + repickStr);
}else{
System.out.println(t[l] + ":" + tempStr[l + k]);
}
/*********************** 我添加的结束 ***********************/
}
System.out.println("---------");// 摘取有用数据存入数据库
k = k + t.length;
}
}
「已注销」 2016-09-27
  • 打赏
  • 举报
回复
又改造了一下应该是接近完美,微信再怎么改返回的报文应该是不会出问题的
public static void main(String[] args) throws Exception {
		String str = getDownloadbill();// 获取对账报文
		String newStr = str.replaceAll(",", " "); // 去空格
		String[] tempStr = newStr.split("`"); // 数据分组
		String[] t = tempStr[0].split(" ");// 分组标题
		int k = 1; // 纪录数组下标
		int j = tempStr.length / t.length; // 计算循环次数
		for (int i = 0; i < j; i++) {
			for (int l = 0; l < t.length; l++) {
				System.out.println(t[l] + ":" + tempStr[l + k]);
			}
			System.out.println("---------");// 摘取有用数据存入数据库
			k = k + t.length;
		}
	}
「已注销」 2016-09-27
  • 打赏
  • 举报
回复
public static void main(String[] args) throws Exception {
		String str = getDownloadbill();//获取对账报文
		String newStr = str.replaceAll(",", " "); // 去空格
		String[] tempStr = newStr.split("`"); // 数据分组
		String[] t = tempStr[0].split(" ");// 分组标题
		int k = 1; // 纪录数组下标
		int j = tempStr.length / 24; // 计算循环次数
		for (int i = 0; i < j; i++) {
			System.out.println(t[0] + ":" + tempStr[k]);
			System.out.println(t[1] + ":" + tempStr[k + 1]);
			System.out.println(t[2] + ":" + tempStr[k + 2]);
			System.out.println(t[3] + ":" + tempStr[k + 3]);
			System.out.println(t[4] + ":" + tempStr[k + 4]);
			System.out.println(t[5] + ":" + tempStr[k + 5]);
			System.out.println(t[6] + ":" + tempStr[k + 6]);
			System.out.println(t[7] + ":" + tempStr[k + 7]);
			System.out.println(t[8] + ":" + tempStr[k + 8]);
			System.out.println(t[9] + ":" + tempStr[k + 9]);
			System.out.println(t[10] + ":" + tempStr[k + 10]);
			System.out.println(t[11] + ":" + tempStr[k + 11]);
			System.out.println(t[12] + ":" + tempStr[k + 12]);
			System.out.println(t[13] + ":" + tempStr[k + 13]);
			System.out.println(t[14] + ":" + tempStr[k + 14]);
			System.out.println(t[15] + ":" + tempStr[k + 15]);
			System.out.println(t[16] + ":" + tempStr[k + 16]);
			System.out.println(t[17] + ":" + tempStr[k + 17]);
			System.out.println(t[18] + ":" + tempStr[k + 18]);
			System.out.println(t[19] + ":" + tempStr[k + 19]);
			System.out.println(t[20] + ":" + tempStr[k + 20]);
			System.out.println(t[21] + ":" + tempStr[k + 21]);
			System.out.println(t[22] + ":" + tempStr[k + 22]);
			System.out.println(t[23] + ":" + tempStr[k + 23]);
			System.out.println("---------");//摘取有用数据存入数据库
			k = k + 24;
		}
	}
「已注销」 2016-09-27
  • 打赏
  • 举报
回复
public static void main(String[] args) throws Exception { String str = getDownloadbill();//获取对账报文 String newStr = str.replaceAll(",", " "); // 去空格 String[] tempStr = newStr.split("`"); // 数据分组 String[] t = tempStr[0].split(" ");// 分组标题 int k = 1; // 纪录数组下标 int j = tempStr.length / 24; // 计算循环次数 for (int i = 0; i < j; i++) { System.out.println(t[0] + ":" + tempStr[k]); System.out.println(t[1] + ":" + tempStr[k + 1]); System.out.println(t[2] + ":" + tempStr[k + 2]); System.out.println(t[3] + ":" + tempStr[k + 3]); System.out.println(t[4] + ":" + tempStr[k + 4]); System.out.println(t[5] + ":" + tempStr[k + 5]); System.out.println(t[6] + ":" + tempStr[k + 6]); System.out.println(t[7] + ":" + tempStr[k + 7]); System.out.println(t[8] + ":" + tempStr[k + 8]); System.out.println(t[9] + ":" + tempStr[k + 9]); System.out.println(t[10] + ":" + tempStr[k + 10]); System.out.println(t[11] + ":" + tempStr[k + 11]); System.out.println(t[12] + ":" + tempStr[k + 12]); System.out.println(t[13] + ":" + tempStr[k + 13]); System.out.println(t[14] + ":" + tempStr[k + 14]); System.out.println(t[15] + ":" + tempStr[k + 15]); System.out.println(t[16] + ":" + tempStr[k + 16]); System.out.println(t[17] + ":" + tempStr[k + 17]); System.out.println(t[18] + ":" + tempStr[k + 18]); System.out.println(t[19] + ":" + tempStr[k + 19]); System.out.println(t[20] + ":" + tempStr[k + 20]); System.out.println(t[21] + ":" + tempStr[k + 21]); System.out.println(t[22] + ":" + tempStr[k + 22]); System.out.println(t[23] + ":" + tempStr[k + 23]); System.out.println("---------");//摘取有用数据存入数据库 k = k + 24; } }
I,Frankenstein 2016-09-21
  • 打赏
  • 举报
回复
大概看了下,他不是说"成功时,数据以文本表格的方式返回,第一行为表头,后面各行为对应的字段内容,字段内容跟查询订单或退款结果一致,具体字段说明可查阅相应接口。" 你是不是可以下载到一个文本,不管txt还是啥。我以前做的对账单都是文本形式。 所以你就可以先把文本下载到一个指定的地方,再用代码去读取这个文本。就是基本的IO读取,一次readLine一行,第一行不要,然后可以先去掉“‘” 。然后split(‘,’)得到一个数组,这个数组的从0-N都是指定顺序的数据,你可以建一个字段一样的表,直接往对象写 数组具体的数据就行了。 至于它最后面倒数第二行竟然还多了一行汉字,这个可以特殊处理下,比如这行数组判断开头是中文,就默认到最后了,就不要。然后再取最后一个统计数据。 基本上以前做的都是这种套路吧~!

50,545

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧