微信支付虽然很坑,但是遇到的问题不是不可以解决的。
微信官网上对于支付返回-1是这样的描述的, 可能的原因:签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配、其他异常等。
我犯的错和他描述的都不一样。
1、新建一个微信支付demo的工程,将包名和签名上传给微信。并保证apk是通过keystore方式打了签名的,用官方的工具做签名。
2、将官方的demo示例参考一下,
权限部分:
<!-- WeixinPay -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
红色的地方要注意:
<span style="color:#222222;"><activity android:name=".MainActivity"
</span><span style="color:#ff0000;">android:exported="true"</span><span style="color:#222222;">>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
</span><span style="color:#ff0000;"><action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="wxd31ef1f4dd******"/></span><span style="color:#222222;">
</intent-filter>
</activity>
<activity android:name=".AlipayH5Activity"></activity>
<activity </span><span style="color:#ff0000;">android:name="com.*******.paydemo.wxapi.WXPayEntryActivity"
android:exported="true"
android:launchMode="singleTop"</span><span style="color:#222222;">>
</activity></span>
Activity部分的逻辑代码:
IWXAPI api = WXAPIFactory.createWXAPI(MainActivity.this, null);//通过工厂创建对象
api.registerApp(ConstUtil.APP_ID);
PayReq request = new PayReq();
request.appId = ConstUtil.APP_ID;
request.partnerId = ConstUtil.PARTNER_ID;
request.prepayId = wxPrepayEntity.getPrepay_id();
request.nonceStr = wxPrepayEntity.getReq_noncestr();
request.timeStamp = wxPrepayEntity.getReq_timestamp();
request.packageValue = wxPrepayEntity.getReq_package();
request.sign = wxPrepayEntity.getReq_sign();
// request.extData = "app data"; // optional
// 在支付之前,如果应用没有注册到微信,应该先调用IWXMsg.registerApp将应用注册到微信
api.sendReq(request);
我遇到的情况是,把
request.appId传给了
request.partnerId,每一个参数都很关键的,如果签名和包名确定都没有问题,那么基本上是传递的参数有问题。最好跟做后台的同事一起看看就能解决问题。