
三、界面交互流程
上面都看明白了,接下来就是写代码了
四、这里必须要有wxapi这个包名,同时必须有WXPayEntryActivity这个类名

五、在AndroidManifest.xml里面配置相关信息
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/><uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/><uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <!-- 启动主页面 --><activityandroid:name=".ui.activity.MainActivity"android:label="@string/app_name" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter><intent-filter><action android:name="android.intent.action.VIEW" /><category android:name="android.intent.category.DEFAULT" /><data android:scheme="wx487898a262d23df3" /></intent-filter></activity><activityandroid:name=".wxapi.WXPayEntryActivity"android:exported="true"android:label="@string/title_activity_wxpayentry"android:launchMode="singleTop" /><receiverandroid:name=".wxpay.AppRegister"android:permission="com.tencent.mm.plugin.permission.SEND" ><intent-filter><action android:name="com.tencent.mm.plugin.openapi.Intent.ACTION_REFRESH_WXAPP" /></intent-filter></receiver>/** * 首先调用接口,要把一些基本信息作为参数传给服务器 * 比如:金额fee,用户id,标题title等 * 调用成功之后会返回微信所需要的参数,如: * appid,noncestr,package,partnerid,prepayid, * timestamp,sign * 微信支付 */StringBuffer sb = new StringBuffer();WeixinPay wpay;private AlertDialog mDialog;private AlertDialog.Builder builder;public void weixinPay() {// 通过WXAPIFactory工厂,获取IWXAPI的实例api = WXAPIFactory.createWXAPI(this, Constants.APP_ID);// 将该app注册到微信api.registerApp(Constants.APP_ID);// 调用接口Params p = new Params();p.put("fee",fee);p.put("spbill_create_ip", NetWorkUtils.getLocalIpAddress(this));String value = "商品标题 " + title;try {String title = new String(value.getBytes("UTF-8"));p.put("body", title);} catch (UnsupportedEncodingException e) {e.printStackTrace();}p.put("userId", O.getUser().getId());p.post(C.URL.WEIXIN_PAY, new ReHandler() {@Overridepublic void onSuccess(NetEntity entity) {wpay = entity.toObj(WeixinPay.class);PayReq req = new PayReq();req.appId = wpay.getAppid();// 微信appIdreq.packageValue = wpay.getPackageValue();// 包req.extData = "app data"; // optionalreq.timeStamp = wpay.getTimeStamp();// 时间戳req.partnerId = wpay.getPartnerId();// 商户号"req.prepayId = wpay.getPrepayId();// 预支付订单号req.nonceStr = wpay.getNonceStr();// 随机字符串req.sign = wpay.getSign();// 后台返回的签名// 本地再次签名List<NameValuePair> signParams = new LinkedList<NameValuePair>();signParams.add(new BasicNameValuePair("appid", req.appId));signParams.add(new BasicNameValuePair("noncestr", req.nonceStr));signParams.add(new BasicNameValuePair("package",req.packageValue));signParams.add(new BasicNameValuePair("partnerid",req.partnerId));signParams.add(new BasicNameValuePair("prepayid", req.prepayId));signParams.add(new BasicNameValuePair("timestamp",req.timeStamp));req.sign = genAppSign(signParams);// 调微信支付if(api.isWXAppInstalled()&&api.isWXAppSupportAPI()){api.sendReq(req);}else{builder = new AlertDialog.Builder(WXPayEntryActivity.this);builder.setNeutralButton("关闭",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {mDialog.dismiss();}}).setTitle("友情提醒").setMessage("请安装微信客户端");mDialog = builder.create();mDialog.show();}}@Overridepublic void onStart() {}@Overridepublic void onFailure(String message) {}});}private String genAppSign(List<NameValuePair> params) {StringBuilder sb = new StringBuilder();for (int i = 0; i < params.size(); i++) {sb.append(params.get(i).getName());sb.append("=");sb.append(params.get(i).getValue());sb.append("&");}sb.append("key=");sb.append(Constants.API_KEY);this.sb.append("sign str
" + sb.toString() + "
");String appSign = MD5.getMessageDigest(sb.toString().getBytes());Log.e("orion", appSign);return appSign;}六、在WXPayEntryActivity类里面成功之后回调方法onResp()@Overridepublic void onResp(BaseResp resp) {Log.d(TAG, "onPayFinish, errCode = " + resp.errCode);if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {if(resp.errCode==-2){Toast.makeText(this,"取消付款!", Toast.LENGTH_LONG).show();}if(resp.errCode==-1){Toast.makeText(this,"支付错误!", Toast.LENGTH_LONG).show();}if(resp.errCode==0){queryOrder();//查询接口调用后台服务器查询是否成功}}最后做完之后,一定要签名打包,这个是微信的独家秘笈,你忘了就会跳出-1,呵呵。