微信app支付android操作

今天,看了一下微信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("支付成功", "支付成功");
            }
		}
	}

你可能感兴趣的:(Android)