您现在的位置是:首页 > 文章详情

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

日期:2018-05-25点击:327
原文: 【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<Object, Object> parameters = new TreeMap<Object, Object>(); 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<Object, Object> parameters = new TreeMap<Object, Object>(); 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)); } }); }
原文链接:https://yq.aliyun.com/articles/678515
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章