版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/quanyechacsdn/article/details/78924391
记录一下吧,我是用的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) { } } } }