微信扫码支付的两种模式,https://pay.weixin.qq.com/wiki/doc/api/index.html 其中第二种模式是我们平时用的比较多的一种支付模式,因为整个二维码的生成过程都是我们自己系统内部来做的
这样一来,我们更容易定制支付页面的一些样式啊,它不需要做url的跳转工作,
所有调用的API,其实它就是一个url地址,你调用它的时候是怎么调用呢?就是把那些参数,通过这个地址把它post过去,你把这些参数告诉它,它就能接收到你的请求了,这些是由微信开发的对外的接口地址,把那些参数组装成xml格式的然后post到这个地址,然后它给你响应的时候也是xml格式的,你拿到xml格式的数据后再对xml格式的数据进行解析 所有的api调用就是你把它需要的数据传给它,它把你需要的数据反给你的这样一个过程
微信后台收到用户请求后,会解析这个请求,会解析微信公众号服务器的地址,然后根据这个地址将请求转发至微信公众号服务器,之后微信公众号服务器将进行“查询北京天气”的逻辑,得到结果之后,会将处理后得信息返回给微信后台,之后微信后台会再次转发给微信客户端,这样用户就得到一个"天气查询得结果",这就是整个开发模式下得数据交互原理,其中微信公众号服务器是我们再开发模式下主要进行开发得内容,包括自己得逻辑
1 微信后台发送过来的消息是xml格式(详情请看微信公众平台-->消息管理那里)xml转换成map
2 然后返回给微信后台(这里是对象--->xml格式)通过PrintWriter out =response.getWriter(); out.print(xml)
3 打印出的xml 跟节点不是<xml></xml>所以要把根节点转换成这样的格式xstream.alias("xml",message.getClass());这样一句代码实现
4 在用户关注与取消公众号时,微信会把这个事件推送到开发者填写的url,为保护用户数据隐私,开发者收到用户取消关注事件时候需要删除用户的所有信息。
5 图文消息
他的消息类型时News,微信公众平台接受的时xml文件格式的
这是一个多图文,只有标题(title)和图片(picUrl)是没有描述信息的
这是一条单图文,上面时标题,中间时图片,下面时图文消息的描述(这个描述也就是我们之前所说的图文消息的digest)
这个也是把根标签转换成<xml></xml>
UnionID机制的作用说明:如果开发者拥有多个移动应用,网站应用和公众账号,可通过获取用户基本信息中的unionid来区分用户的唯一性,因为同一个用户,对于同一个微信开放平台下的不同应用(可以是移动应用,网站应用,和公众账号)unionid是相同的
微信开发接入:接入是通过get请求, 微信服务器将发送get请求到填写的服务器地址url上
响应(即普通微信用户向公众号发送消息时的回复),微信服务器将用post方式,并且是以xml格式返回数据的
在写post方法之前,要写两个方法,一个是将xml转换成集合类型,因为从微信后台发送过来的数据是xml格式的
微信公众号中接口开发的两种提交方式:用get方式提交的这种类型,我们通过这个接口地址去微信后台,获取我们所需要的信息
而post方式的是我们需要通过这个接口地址将我们的一些参数提交到微信公众后台,比如说要创建菜单,我们就需要把组装好的菜单以post方式提交到微信公众后台
下面的对这两个方法的封装代码public class WeixinUtil {
private static final String APPID="wxe40289ddd9a22bb6";
private static final String APPSECRET="c79ba3aa5b2db626c69cebf4a1071f72";
/**
* 封装一个get方法
* @param url
* @return
*/
public static JSONObject get(String url){
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpGet hhtpGet = new HttpGet(url);
JSONObject jsonObject=null;
try {
HttpResponse response = httpClient.execute(hhtpGet);
//获取相应里面的内容
HttpEntity entity = response.getEntity();
//将httpEntity类型转换成String类型
String string = EntityUtils.toString(entity,"utf-8");
//再将String类型的转换成json格式的
jsonObject= JSONObject.fromObject(string);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return jsonObject;
}
/**
* 封装一个post请求 比如说创建菜单,把封装好的菜单提交到微信公众后台
* @param url
* @param outUrl
* @return
*/
public static JSONObject post(String url,String outUrl) {
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
JSONObject jsonObject=null;
try {
//httpost请求
httpPost.setEntity(new StringEntity(outUrl,"utf-8"));
HttpResponse response = httpClient.execute(httpPost);
HttpEntity entity = response.getEntity();
String string = EntityUtils.toString(entity);
jsonObject= JSONObject.fromObject(string);
} catch (Exception e) {
e.printStackTrace();
}
return jsonObject;
}
}