微信支付集成
2017-06-07 本文已影响123人
幽兰清风
-
注意
-
如果直接运行在手机上可能调用不成功或只能支付成功一次,
-
测试 必须签名,签名分为debug和realease,注意和微信注册的签名保持一致
-
测试的时候debug和Realease分开不能混淆,要在gradle中进行配置
-
每次打包后要用签名工具获取签名,然后在微信平台修改应用签名,必须一对一
-
WXEntryActivity必须在放在. wxapi包下
-
在调用钱必须先注册
-
调用失败可能是因为微信缓存的问题,清理一下就可以
-
修改签名后可能第一次调用不成功,以后就没有问题了
-
-
代码
IWXAPI api=null; api = WXAPIFactory.createWXAPI(getActivity().getApplicationContext(), "wx909c40e73431b005"); api.registerApp("wx909c40e73431b005"); private void getWXOrderInfo(String money) { String url = Contacts.SHAir_SERVICE + Contacts.ServiceConstant.CACHE_PAY; HashMap<String, String> params = new HashMap<>(); params.put("", ""); params.put("", ""); //通过接口获取后台给的订单信息 OkGo.post(url).tag(this).params(params,false) .execute(new StringCallback() { @Override public void onSuccess(String s, Call call, Response response) { try { JSONObject json = new JSONObject(s); String data = json.getString("data"); if (json.getString("code").equals("1")) { PayReq request = new PayReq(); Log.d("mao", s); JSONObject jsonObject = new JSONObject(data); request.appId = jsonObject.getString("appid"); //wxf8b4f85f3a794e77,测试用appId request.partnerId = jsonObject.getString("partnerid");// 微信支付分配的商户号 request.prepayId = jsonObject.getString("prepayid");// 预支付订单号 request.nonceStr = jsonObject.getString("noncestr");// 随机字符串 request.timeStamp = jsonObject.getString("timestamp");// 时间戳 request.packageValue = jsonObject.getString("package"); request.sign = jsonObject.getString("sign");// 签名 // 调用微信支付,如果没有注册在调用之前要先进行注册 api.sendReq(request); SPutils.put(activity,"wxpay",true); } else { Toas.makeText(getContext(), "调用失败",Toast.LENGTH_SHROT).show(); } } catch (Exception e) { e.printStackTrace(); Toas.makeText(getContext(), "请求异常",Toast.LENGTH_SHROT).show(); } } }); }
-
gradle
-
依赖
compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+' compile files('libs/libammsdk.jar')
-
签名
android { signingConfigs { release { keyAlias 'key' keyPassword '123456' storeFile file('key.jks') storePassword '123456' } } buildTypes { release { minifyEnabled false signingConfig signingConfigs.release//添加这句话 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } debug { minifyEnabled false signingConfig signingConfigs.release//添加这句话 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } }
-
-
混淆
-keep class com.tencent.mm.opensdk.** { *; } -keep class com.tencent.mm.sdk.** { *; }
-
权限
<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"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
-
配置: WXEntryActivity必须在. wxapi下
<activity android:name=".wxapi.WXEntryActivity" android:configChanges="keyboardHidden|orientation|screenSize" android:exported="true" android:screenOrientation="portrait" android:theme="@android:style/Theme.Translucent.NoTitleBar" />