微信参数
步骤1:你先去注册微信官网的一些信息然后获取以下这3个东西
就这几个东西
随机字符串生成:
一般都是固定的,自己也懒得写所以找了一个,如果要自己写的话给你提供一些思路
我们看下网上的吧
MD5方法
代码复制
排版真难受,这玩意连个代码引用都没有??????
这个使用方法是这样的
代码复制
```
//生成随机字符串
public staticStringgenNonceStr() {
Random random =newRandom();
returnMD5.getMessageDigest(String.valueOf(random.nextInt(10000)).getBytes());
}
```
-----------------------
```
public final staticStringgetMessageDigest(byte[] buffer) {
charhexDigits[] = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
try{
MessageDigest mdTemp = MessageDigest.getInstance("MD5");
mdTemp.update(buffer);
byte[] md = mdTemp.digest();
intj = md.length;
charstr[] =new char[j *2];
intk =0;
for(inti =0;i < j;i++) {
bytebyte0 = md[i];
str[k++] = hexDigits[byte0 >>>4&0xf];
str[k++] = hexDigits[byte0 &0xf];
}
return newString(str);
}catch(Exception e) {
return null;
}
}
```
比如:2017年7月17日就写成2017717
使用网路访问:http://pv.sohu.com/cityjson?ie=utf-8
你自己截取一下就OK了
你的商户号
随意写
随意写
好了基本的功能数据都介绍完了
导入微信的Sdk
--------------------------------
别急老规矩先复制代码
```
//生成预支付随机签名
public staticStringgenSign(OrederSendInfo info) {
StringBuffer sb =newStringBuffer(info.toString());
if(WX_DATA_XINHAO_HAN.API_KEY.equals("")) {
Toast.makeText(UIUtils.getContext(),"APP_ID为空",Toast.LENGTH_LONG).show();
}
//拼接密钥
sb.append("key=");
sb.append(WX_DATA_XINHAO_HAN.API_KEY);
String appSign = MD5.getMessageDigest(sb.toString().getBytes());
Log.e("Sign-------------","genSign: "+ appSign.toUpperCase());
returnappSign.toUpperCase();
}
```
这个其实就是一个Bean
看代码
```
public classOrederSendInfo {
privateStringappid;
privateStringmch_id;
privateStringnonce_str;
privateStringbody;
privateStringout_trade_no;
privateStringtotal_fee;
privateStringspbill_create_ip;
privateStringnotify_url;
privateStringtrade_type;
privateStringsign;
publicOrederSendInfo(String appid,String mch_id,String nonce_str,String body,String out_trade_no,String total_fee,String spbill_create_ip,String notify_url,String trade_type) {
this.appid= appid;
this.mch_id= mch_id;
this.nonce_str= nonce_str;
this.body= body;
this.out_trade_no= out_trade_no;
this.total_fee= total_fee;
this.spbill_create_ip= spbill_create_ip;
this.notify_url= notify_url;
this.trade_type= trade_type;
}
publicStringgetAppid() {
returnappid;
}
public voidsetAppid(String appid) {
this.appid= appid;
}
publicStringgetMch_id() {
returnmch_id;
}
public voidsetMch_id(String mch_id) {
this.mch_id= mch_id;
}
publicStringgetNonce_str() {
returnnonce_str;
}
public voidsetNonce_str(String nonce_str) {
this.nonce_str= nonce_str;
}
publicStringgetBody() {
returnbody;
}
public voidsetBody(String body) {
this.body= body;
}
publicStringgetOut_trade_no() {
returnout_trade_no;
}
public voidsetOut_trade_no(String out_trade_no) {
this.out_trade_no= out_trade_no;
}
publicStringgetTotal_fee() {
returntotal_fee;
}
public voidsetTotal_fee(String total_fee) {
this.total_fee= total_fee;
}
publicStringgetSpbill_create_ip() {
returnspbill_create_ip;
}
public voidsetSpbill_create_ip(String spbill_create_ip) {
this.spbill_create_ip= spbill_create_ip;
}
publicStringgetNotify_url() {
returnnotify_url;
}
public voidsetNotify_url(String notify_url) {
this.notify_url= notify_url;
}
publicStringgetTrade_type() {
returntrade_type;
}
public voidsetTrade_type(String trade_type) {
this.trade_type= trade_type;
}
publicStringgetSign() {
returnsign;
}
public voidsetSign(String sign) {
this.sign= sign;
}
//注意排序规则ASCII排序(一般按照A-Z,a-z)就行
@Override
publicStringtoString() {
return"appid="+appid+'&'+
"body="+body+'&'+
"mch_id="+mch_id+'&'+
"nonce_str="+nonce_str+'&'+
"notify_url="+notify_url+'&'+
"out_trade_no="+out_trade_no+'&'+
"spbill_create_ip="+spbill_create_ip+'&'+
"total_fee="+total_fee+'&'+
"trade_type="+trade_type+'&';
}
}
```
在Studio里边加入这段
```
compile ('com.thoughtworks.xstream:xstream:1.4.7') {
excludegroup:'xmlpull',module:'xmlpull'
}
```
```
public static voidUnfiedOrder(OrederSendInfo orederSendInfo, finalListerner listerner) {
//生成sign签名
String sign = WXpayUtils.genSign(orederSendInfo);
//生成所需参数,为xml格式
orederSendInfo.setSign(sign.toUpperCase());
XStream xstream =newXStream();
xstream.alias("xml",OrederSendInfo.class);
finalString xml = xstream.toXML(orederSendInfo).replaceAll("__","_");
Log.e("xml---------------","UnfiedOrder: "+ xml);
//调起接口,获取预支付ID
OkHttpUtils.ResultCallback resultCallback =newOkHttpUtils.ResultCallback() {
@Override
public voidonSuccess(String response) {
Log.e("返回的数据","onSuccess: "+ response);
String data = response;
data = data.replaceAll("","");
listerner.Success(data);
}
@Override
public voidonFailure(Exception e) {
listerner.Faiulre(e.toString());
}
};
try{
OkHttpUtils.post(WX_DATA_XINHAO_HAN.UNIFIED_ORDER,resultCallback, newString(xml.getBytes("UTF-8"),"ISO8859-1"));
}catch(UnsupportedEncodingException e) {
e.printStackTrace();
}
}
```
至于里边的Listnener
在这里
代码复制
```
public interfaceListerner {
voidSuccess(String data);
voidFaiulre(String data);
}
```
开始填充数据
特别感谢:掘墓人
博客地址:http://www.jianshu.com/p/9a3127cfda4d
我通过他所给的DEMO集成出了一套及简单的Demo
下载地址: 链接: https://pan.baidu.com/s/1c2zURjq 密码: jpr5
你在你自己创建的Activity-->WXEntryActivity的这个方法下
```
WxMain.setStringOnListener(WXEntryActivity.this);
//如果是支付
WxMain.WXMessage wxMessage;
if(baseResp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
intcode = baseResp.errCode;
switch(code) {
case0:
if(wxMessage!=null)
wxMessage.message("支付成功",0,"0.0");
//支付成功
break;
case-1:
if(wxMessage!=null)
wxMessage.message("支付失败",-1,"0.0");
//支付失败
finish();
break;
case-2:
if(wxMessage!=null)
wxMessage.message("支付取消",-2,"0.0");
//支付取消
finish();
break;
default:
if(wxMessage!=null)
wxMessage.message("支付失败",-3,"0.0");
//支付失败
setResult(RESULT_OK);
finish();
break;
}
return;
}
```
使用是这样的:
工具可能会用到的东西