【Android】解决微信调起支付接口没反应,调不起来微信的问题

原文: 【Android】解决微信调起支付接口没反应,调不起来微信的问题

//#前言
吐槽一下,微信支付的sdk真难用,文档混乱,坑不少。

正文:可能引起这种情况的问题

1. 最不能出现的

你的APPID和商户号写错了。appid是你open.weixin.qq.com里你设置的应用的id。

2. 最可能出现的

你应用的签名弄错了,这里坑比较多。
* 当你直接用AndroidStudio调试,在手机上直接Run的时候,用给的那个签名软件,获取到签名更新到你应用信息的这里:
更新到应用签名处
* 当你在另外一台电脑上调试的时候,你的应用的签名其实是会改变的,所以用那个签名软件,获取到签名后,再次更新到你的应用的信息里。
* 当你的APP开发的差不多了,需要发布(Generate Signed APK)时,先安装到一台手机上,然后获取签名,再次更新到你的应用的信息里。

3. 也有很大可能出现的

其实这个具体是怎么引起的我也不知道,有时候你重启下手机或者清理下微信的缓存,就会发现,竟然能调起来微信了。对,就是这么神奇!!

可能对你有些帮助的

在下面的代码中通过查看request.checkArgs())和api.sendReq(request)的返回值,帮助你定位错误。

我的代码提供参考

public void onClick(View view) {
                Unifiedorder unifiedorder = new Unifiedorder();
                final SortedMap parameters = new TreeMap();
                parameters.put("appid", ConstantStrings.APP_ID);
                unifiedorder.setAppid(ConstantStrings.APP_ID);
                parameters.put("mch_id", ConstantStrings.MCH_ID);
                unifiedorder.setMch_id(ConstantStrings.MCH_ID);
                //获取随机数的方法
                String nonce_str = Utils.getNonce_str();
                parameters.put("nonce_str", nonce_str);
                unifiedorder.setNonce_str(nonce_str);
                parameters.put("body", "weimabang shopping");//not support cn-zh
                unifiedorder.setBody("weimabang shopping");
                //order_id就是订单号
                parameters.put("out_trade_no", "20170405120603");//我这里的订单号只是举个例子,不要一直用这一个,千万不能写死
                unifiedorder.setOut_trade_no("20170405120603");//我这里的订单号只是举个例子,不要一直用这一个,千万不能写死
                //总金额
                parameters.put("total_fee", 1);//单位是分
                unifiedorder.setTotal_fee("1");
                //ip地址
                parameters.put("spbill_create_ip", "123.123.123.123");
                unifiedorder.setSpbill_create_ip("123.123.123.123");
                //支付成功的回调地址
                String notify_url = "http://www.baidu.com";
                parameters.put("notify_url", notify_url);
                unifiedorder.setNotify_url(notify_url);
                parameters.put("trade_type", "APP");
                unifiedorder.setTrade_type("APP");
                //方法生成的sign值
                String sign = Utils.createSign(parameters);
                unifiedorder.setSign(sign);


                OkHttpUtils.postString().content(XMLHelper.getXMLFromUnifiedorder(unifiedorder))
                        .url(ConstantStrings.UNIFORMORDERURL).build().execute(new StringCallback() {
                    @Override
                    public void onError(Call call, Exception e) {

                    }

                    @Override
                    public void onResponse(Call call, String s) {
                        //返回值
                        //Toast.makeText(PayActivity.this, s, Toast.LENGTH_LONG).show();

                        int startIndex=s.indexOf("prepay_id");
                        startIndex=s.indexOf("wx",startIndex);
                        int endIndex=s.indexOf("]",startIndex);
                        String prepayID=s.substring(startIndex,endIndex);


                        Log.d("jim","data is "+s);
                        Log.d("jim","prepay id is "+prepayID);

                        String nonceStr=Utils.getNonce_str();
                        String timeStamp=System.currentTimeMillis()/1000+"";
                        final SortedMap parameters = new TreeMap();
                        parameters.put("appid",ConstantStrings.APP_ID);
                        parameters.put("partnerid",ConstantStrings.MCH_ID);
                        parameters.put("prepayid",prepayID);
                        parameters.put("package","Sign=WXPay");
                        parameters.put("noncestr",nonceStr);
                        parameters.put("timestamp",timeStamp);
                        String sign=Utils.createSign(parameters);

                       IWXAPI api= WXAPIFactory.createWXAPI(PayActivity.this,ConstantStrings.APP_ID);
                        PayReq request=new PayReq();

                        request.appId=ConstantStrings.APP_ID;
                        request.partnerId = ConstantStrings.MCH_ID;
                        request.prepayId= prepayID;
                        request.packageValue = "Sign=WXPay";
                        request.nonceStr= nonceStr;
                        request.timeStamp= timeStamp;
                        request.sign= sign;
                        Log.d("jim","check args "+request.checkArgs());
                        Log.d("jim","send return :"+api.sendReq(request));

                    }
                });
                }

你可能感兴趣的:(【Android】解决微信调起支付接口没反应,调不起来微信的问题)