前前后后做微信支付两天,又好久没有写技术博客了,另一个号的账号密码忘了,重新写了
1:我的demo界面很简单,只写了一个button 调起支付的用的
下面官方demo项目的框架
2:导入微信sdk 添加依赖 这个就不用说了吧
3:首先将工具类copy到自己的项目中Constants.java,然后将wxapi这个文件夹拷打您的包下面的第一级路径,里面打开很简单,一个appid,还有个一些静态常量,后面用的到暂且不用理解
4:将app注册到微信中
5:检查微信版本是否支持支付功能
//检查版本是否支持 private boolean IsSupport() { boolean isPaySupported = msgApi.getWXAppSupportAPI() >= Build.PAY_SUPPORTED_SDK_INT; return isPaySupported; }6:在button的点击事件中首先判断版本支持,然后:
String url = "http://wxpay.weixin.qq.com/pub_v2/app/app_pay.php?plat=android"; Toast.makeText(MainActivity.this, "获取订单中...", Toast.LENGTH_SHORT).show(); 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(MainActivity.this, "正常调起支付", Toast.LENGTH_SHORT).show(); // 在支付之前,如果应用没有注册到微信,应该先调用IWXMsg.registerApp将应用注册到微信 msgApi.sendReq(req); }else{ Log.d("PAY_GET", "返回错误"+json.getString("retmsg")); Toast.makeText(MainActivity.this, "返回错误"+json.getString("retmsg"), Toast.LENGTH_SHORT).show(); } }else{ Log.d("PAY_GET", "服务器请求错误"); Toast.makeText(MainActivity.this, "服务器请求错误", Toast.LENGTH_SHORT).show(); } }catch(Exception e){ Log.e("PAY_GET", "异常:"+e.getMessage()); Toast.makeText(MainActivity.this, "异常:"+e.getMessage(), Toast.LENGTH_SHORT).show(); }
注意点:wxapi目录的路径,清单文件与demo对比,还有返回结果为-1,最好到手机设置里面,将微信数据清除,然后重新登录就可以啦(测试id是这样的,正式开发则不需要) 欢迎提问