微信登陆,支付防坑指南

1.防坑指南:

  1.  微信未返回Code?
    1.  请更新libammsdk.jar,import com.tencent.mm.sdk.modelmsg.SendAuth。发现命名空间发生了很大的变化。(微信婊这么大的改动也不说下,这么查的 啊,日了狗了。)
  2. 如何接收微信授权后的回调?
    1.  在包名下建立wxapi目录,并在该wxapi目录下新增一个WXEntryActivity类
  3. 为什么回调没有执行?
    1.   配置AndroidManifest,如下:(此问题我也是参考别人的出来的,不知道是不是这个原因。)
<activity
            android:name="net.sourceforge.simcpux.wxapi.WXEntryActivity"
            android:configChanges="orientation|keyboardHidden"
            android:exported="true"
            android:launchMode="singleTop"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" >
            <intent-filter>
                <action android:name="android.intent.action.VIEW" >
                </action>

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
          1.  4  如何拿到Code
private void handleIntent(Intent intent) {
            String result = "";
            ConUrls.WriteLog("handleIntent"+result);
            SendAuth.Resp resp = new SendAuth.Resp(intent.getExtras());
            if (resp.errCode == BaseResp.ErrCode.ERR_OK) {
                //用户同意
                result ="发送成功";
                //ConUrls.WriteLog("handleIntent"+result);
                //Contexts.CurWeiXinHelper;
                String    weixinCode = resp.code;
                ConUrls.WriteLog("onResume "+weixinCode);
                if(Contexts.CurWeiXinHelper !=null)
                {
                    ConUrls.WriteLog("CurWeiXinHelper "+weixinCode);
                    try
                    {
                        
                        Contexts.CurWeiXinHelper.GetLoginInfo(weixinCode);
                        Contexts.CurWeiXinHelper=null;
                        finish();
                    }
                    catch(Exception e)
                    {
                        ConUrls.WriteLog(e.getMessage());
                    }
                    
                }
            }
        }

5.如何根据code  拿到 openId?

  

private  void WXGetAccessToken(){
        HttpClient get_access_token_httpClient = new DefaultHttpClient();
        HttpClient get_user_info_httpClient = new DefaultHttpClient();
        String access_token="";
        String openid ="";
        try {
            HttpPost postMethod = new HttpPost(get_access_token);
            HttpResponse response = get_access_token_httpClient.execute(postMethod); // 执行POST方法
            if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
                InputStream is = response.getEntity().getContent();
                BufferedReader br = new BufferedReader(
                        new InputStreamReader(is));
                String str = "";
                StringBuffer sb = new StringBuffer();
                while ((str = br.readLine()) != null) {
                    sb.append(str);
                }
                is.close();
                String josn = sb.toString();
                JSONObject json1 = new JSONObject(josn);
                access_token = (String) json1.get("access_token");
                openid = (String) json1.get("openid");
            
                
                WeiXinAuthLoginModel model=new WeiXinAuthLoginModel();
                model.setOpenId(openid);
                LoginModel MyLoginModel= SysHelper.GetWeiXinLogin(model, curContent);
                Contexts.MyLoginModel = MyLoginModel;
                SysHelper.StartAm(curContent);
                if(mHandler!=null)
                {
                    Message msg=new Message();
                    msg.obj=MyLoginModel;
                    msg.arg1=mHandlerOrg1;
                    msg.what=1;
                    mHandler.sendMessage(msg);
                }
                
                
            } else {
            }
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
            if(mHandler!=null)
            {
                Message msg=new Message();
                msg.obj="登录失败";
                msg.arg1=mHandlerOrg1;
                msg.arg2=-1;
                msg.what=0;
                mHandler.sendMessage(msg);
            }
        } catch (ClientProtocolException e) {
            e.printStackTrace();
            if(mHandler!=null)
            {
                Message msg=new Message();
                msg.obj="登录失败";
                msg.arg1=mHandlerOrg1;
                msg.arg2=-1;
                msg.what=0;
                mHandler.sendMessage(msg);
            }
        } catch (IOException e) {
            e.printStackTrace();
            if(mHandler!=null)
            {
                Message msg=new Message();
                msg.obj="登录失败";
                msg.arg1=mHandlerOrg1;
                msg.arg2=-1;
                msg.what=0;
                mHandler.sendMessage(msg);
            }
        } catch (JSONException e) {
            e.printStackTrace();
            if(mHandler!=null)
            {
                Message msg=new Message();
                msg.obj="登录失败";
                msg.arg1=mHandlerOrg1;
                msg.arg2=-1;
                msg.what=0;
                mHandler.sendMessage(msg);
            }
        }
        //不获取 info
//        String get_user_info_url=getUserInfo(access_token,openid);
//        WXGetUserInfo(get_user_info_url);
    }

 

微信支付篇

1.app支付

  好像没有什么问题,直接过了。

2.公众号支付

  一直报 chooseWxpay:fail。

原因:1.支付目录配置错误,必须精确到最后一级。

          2.请注意timestamp 这个参数,后台(C#)是timeStamp  S大写,但在JS端timestamp。S小写

posted @ 2015-05-15 13:56  Shikyoh  阅读(528)  评论(0编辑  收藏  举报