• 微信登陆,支付防坑指南


    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小写

  • 相关阅读:
    Android 自定义Dialog中加EditText弹不出键盘跟Dialog遮挡键盘的问题
    上周热点回顾(8.28-9.3)团队
    云计算之路-阿里云上-新车限行:新购服务器无法访问任何远程25端口团队
    上周热点回顾(8.21-8.27)团队
    云计算之路-阿里云上-容器难容:自建docker swarm集群遭遇无法解决的问题团队
    上周热点回顾(8.14-8.20)团队
    上周热点回顾(8.7-8.13)团队
    上周热点回顾(7.31-8.6)团队
    上周热点回顾(7.24-7.30)团队
    故障公告:docker swarm集群“群龙无首”造成部分站点无法访问团队
  • 原文地址:https://www.cnblogs.com/shikyoh/p/4505800.html
Copyright © 2020-2023  润新知