今天,看了一下微信app支付开发文档,发现这个文档太坑了,所有的错误信息全部归类为-1;
这里记录了一下,我的开发过程,
首先要去微信平台,准备好要用的appid,设置好应用的签名,和应用包名(这里设置好了一定要用在开发中应用),这些东西在微信官方都有提示之间操作即可微信开发文档
这里附上我的代码:
在此之前需要导入微信的jar,然后注册微信的appid
private IWXAPI api;
api=WXAPIFactory.createWXAPI(this,null);
api.registerApp(APPID);//注册的appid
下面是调用微信支付的代码
try{
byte[] buf = Util.httpGet(url);//服务器地址
if (buf != null && buf.length > 0) {
String content = new String(buf);
Log.e("get server pay params:",content);
JSONObject json = new JSONObject(content);
if(null != json && !json.has("retcode") ){
PayReq req = new PayReq();
//req.appId = "wxf8b4f85f3a794e77"; // 测试用appId
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
Toast.makeText(PayActivity.this, "正常调起支付", Toast.LENGTH_SHORT).show();
Toast.makeText(WalletActivity.this, "正常调起支付", Toast.LENGTH_SHORT).show();
// 在支付之前,如果应用没有注册到微信,应该先调用IWXMsg.registerApp将应用注册到微信
api.sendReq(req);//这里是掉微信支付
Toast.makeText(WalletActivity.this, "正常调起支付11", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(WalletActivity.this, "返回错误", Toast.LENGTH_SHORT).show();
}
}else{
Log.d("PAY_GET", "服务器请求错误");
Toast.makeText(WalletActivity.this, "服务器请求错误", Toast.LENGTH_SHORT).show();
}
}catch(Exception e){
Log.e("PAY_GET", "异常:"+e.getMessage());
Toast.makeText(WalletActivity.this, "异常:"+e.getMessage(), Toast.LENGTH_SHORT).show();
}
在这里可能会遇到返回为-1的错误,几乎所有的错误都报-1;
我今天在开发的时候,就遇到很多个个-1,在这里遇到-1的情况大多数是,appid或者应用签名不正确。应用签名一定要注意和平台上设置的一致,
正常操作的话应该这里就能掉微信支付了,但是还未设置回调
回调
支付结果回调
参照微信SDK Sample,在net.sourceforge.simcpux.wxapi包路径中实现WXPayEntryActivity类(包名或类名不一致会造成无法回调),在WXPayEntryActivity类中实现onResp函数,支付完成后,微信APP会返回到商户APP并回调onResp函数,开发者需要在该函数中接收通知,判断返回错误码,如果支付成功则去后台查询支付结果再展示用户实际支付结果。注意一定不能以客户端返回作为用户支付的结果,应以服务器端的接收的支付通知或查询API返回的结果为准。(我理解就是直接把wxapi包WXPayEntryActivity直接拿来用就可以,回调最关键代码就这部分)
@Override
public void onResp(BaseResp resp) {
Log.d("tag", "onPayFinish, errCode = " + resp.errCode);
if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
if (resp.errCode==-1){
Log.i("支付失败",resp.errCode+"");
Log.i("支付失败",resp.errStr+"");
Log.i("支付失败",resp.getType()+"");
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("提示");
builder.setMessage(getString(R.string.pay_result_callback_msg, String.valueOf(resp.errCode)));
builder.show();
}else if(resp.errCode== -2){
Log.i("支付结果:失败",resp.errStr);
Log.i("支付结果:失败",resp.errCode+"");
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("提示");
builder.setMessage(getString(R.string.pay_result_callback_msg, String.valueOf(resp.errCode)));
builder.show();
}else{
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("提示");
builder.setMessage(getString(R.string.pay_result_callback_msg, String.valueOf(resp.errCode)));
builder.show();
Log.i("支付成功", "支付成功");
}
}
}