记录一下吧,我是用的Android Studio,所以这里只说这个工具的集成,
步骤:
1,集成环境:(微信登录和分享也是用的这个依赖)
compile 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'
2,清单文件
(1)权限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
(2)回调(要在自己包名目录下新建目录wxapi,然后新建WXPayEntryActivity,下面会贴出实现类,注意这个类和微信登录回调的是不一样的,红色的部分)
<activity
android:name=".wxapi.WXPayEntryActivity"
android:exported="true"
android:launchMode="singleTop"
android:screenOrientation="portrait" />
3:微信注册(在Application的create中)
IWXAPI mWxApi = WXAPIFactory.createWXAPI(this, ShareKey.WX_ID, true);
// 将该app注册到微信
mWxApi.registerApp(ShareKey.WX_ID);
4,调起支付
public static void getWXPayInfo(Context context, String result) {
JSONObject json = parseXml(result);
IWXAPI api = WXAPIFactory.createWXAPI(context, ShareKey.WX_ID);
PayReq req = new PayReq();
req.appId = json.getString("appid");
req.partnerId = json.getString("partnerid");
req.prepayId = json.getString("prepayid");
req.nonceStr = json.getString("noncestr");
req.timeStamp = json.getString("timestamp");
req.packageValue = json.getString("package");
req.sign = json.getString("sign");
req.extData = "app data"; // optional
// 在支付之前,如果应用没有注册到微信,应该先调用IWXMsg.registerApp将应用注册到微信
api.sendReq(req);
}
解析xml的方法:
private static JSONObject parseXml(String str) {
JSONObject obj = new JSONObject();
try {
InputStream is = new ByteArrayInputStream(str.getBytes("UTF-8"));
XmlPullParser xmlPullParser = Xml.newPullParser();
xmlPullParser.setInput(is, "UTF-8");
//获取解析的标签的类型
int type = xmlPullParser.getEventType();
while (type != XmlPullParser.END_DOCUMENT) {
switch (type) {
case XmlPullParser.START_TAG:
//获取开始标签的名字
String starttgname = xmlPullParser.getName();
if ("appid".equals(starttgname)) {
//获取id的值
obj.put("appid",xmlPullParser.nextText()) ;
} else if ("noncestr".equals(starttgname)) {
obj.put("noncestr",xmlPullParser.nextText()) ;
} else if ("package".equals(starttgname)) {
obj.put("package",xmlPullParser.nextText()) ;
} else if ("partnerid".equals(starttgname)) {
obj.put("partnerid",xmlPullParser.nextText()) ;
} else if ("prepayid".equals(starttgname)) {
obj.put("prepayid",xmlPullParser.nextText()) ;
} else if ("sign".equals(starttgname)) {
obj.put("sign",xmlPullParser.nextText()) ;
} else if ("timestamp".equals(starttgname)) {
obj.put("timestamp",xmlPullParser.nextText()) ;
}
break;
case XmlPullParser.END_TAG:
break;
}//细节:
type = xmlPullParser.next();
}
} catch (Exception e) {
e.printStackTrace();
}
return obj;
}
5,微信支付回调(和微信登录及分享的回调不是一个类)
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import com.tencent.mm.opensdk.constants.ConstantsAPI;
import com.tencent.mm.opensdk.modelbase.BaseReq;
import com.tencent.mm.opensdk.modelbase.BaseResp;
import com.tencent.mm.opensdk.openapi.IWXAPIEventHandler;
import com.tencent.mm.opensdk.openapi.WXAPIFactory;
public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler {
private final int REQUEST_PAY = 100;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//回调的关键,不写的话可能回调失败
WXAPIFactory.createWXAPI(this, ShareKey.WX_ID, false).handleIntent(getIntent(), this);
}
@Override
public void onReq(BaseReq req) {
}
@Override
public void onResp(BaseResp resp) {
if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
switch (resp.errCode) {
case 0://成功
break;
case -1://错误
Tool.toast(this, "微信支付失败");
finish();
break;
case -2://取消
Tool.toast(this, "微信支付取消");
finish();
break;
}
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
}
}
}
}