您的位置:首页 > 移动开发 > 微信开发

phonegap 微信登录总结

2016-02-18 17:55 519 查看
wechat.js文件

cordova.define(“com.libei.cordova.wechat.Wechat”, function(require, exports, module) { var exec = require(‘cordova/exec’);

module.exports = {

Scene: {

SESSION: 0, // 聊天界面

TIMELINE: 1, // 朋友圈

FAVORITE: 2 // 收藏

},

Type: {
APP:     1,
EMOTION: 2,
FILE:    3,
IMAGE:   4,
MUSIC:   5,
VIDEO:   6,
WEBPAGE: 7
},

isInstalled: function (onSuccess, onError) {
exec(onSuccess, onError, "Wechat", "isWXAppInstalled", []);
},

/**
* Share a message to wechat app
*
* @example
* <code>
* Wechat.share({
*     message: {
*        title: "Message Title",
*        description: "Message Description(optional)",
*        mediaTagName: "Media Tag Name(optional)",
*        thumb: "http://YOUR_THUMBNAIL_IMAGE",
*        media: {
*            type: Wechat.Type.WEBPAGE,   // webpage
*            webpageUrl: "https://github.com/xu-li/cordova-plugin-wechat"    // webpage
*        }
*    },
*    scene: Wechat.Scene.TIMELINE   // share to Timeline
* }, function () {
*     alert("Success");
* }, function (reason) {
*     alert("Failed: " + reason);
* });
* </code>
*/
share: function (message, onSuccess, onError) {
exec(onSuccess, onError, "Wechat", "share", [message]);
},

/**
* Sending an auth request to Wechat
*
* @example
* <code>
* Wechat.auth(function (response) { alert(response.code); });
* </code>
*/
auth: function (scope, state, onSuccess, onError) {
if (typeof scope == "function") {
// Wechat.auth(function () { alert("Success"); });
// Wechat.auth(function () { alert("Success"); }, function (error) { alert(error); });
return exec(scope, state, "Wechat", "sendAuthRequest");
}

if (typeof state == "function") {
// Wechat.auth("snsapi_userinfo", function () { alert("Success"); });
// Wechat.auth("snsapi_userinfo", function () { alert("Success"); }, function (error) { alert(error); });
return exec(state, onSuccess, "Wechat", "sendAuthRequest", [scope]);
}

return exec(onSuccess, onError, "Wechat", "sendAuthRequest", [scope, state]);
},

/**
* Send a payment request
*
* @link https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=9_1 * @example
* <code>
* var params = {
*     mch_id: '10000100', // merchant id
*     prepay_id: 'wx201411101639507cbf6ffd8b0779950874', // prepay id returned from server
*     nonce: '1add1a30ac87aa2db72f57a2375d8fec', // nonce string returned from server
*     timestamp: '1439531364', // timestamp
*     sign: '0CB01533B8C1EF103065174F50BCA001', // signed string
* };
* Wechat.sendPaymentRequest(params, function () {
*     alert("Success");
* }, function (reason) {
*     alert("Failed: " + reason);
* });
* </code>
*/
sendPaymentRequest: function (params, onSuccess, onError) {
exec(onSuccess, onError, "Wechat", "sendPaymentRequest", [params]);
}


};

});

2 wechatLogin.js

function wechatLogin()

{

//判断客户端是否安装微信

Wechat.isInstalled(function (installed) {
alert("Wechat installed: " + (installed ? "Yes" : "No"));
}, function (reason) {
alert("Failed: " + reason);
});

//获取code临时票据
var scope = "snsapi_userinfo";
var state = "###";
Wechat.auth(scope,state, function (openid) {

/*var obj = eval('(' + response + ')');
var access_token=obj.access_token;
var openid=obj.openid;*/
alert(openid);
//          you may use response.code to get the access token.
//alert(JSON.stringify(response));
}, function (reason) {
alert("Failed: " + reason);
});

//获取code临时票据
/*var scope = "snsapi_userinfo";
var state = "###";

Wechat.auth(scope, state,function (response) {

var data=JSON.stringify(response)


// var obj = eval(‘(’ + data + ‘)’);

// var code=obj.code;// you may use response.code to get the access token.

alert(data);

}, function (reason) {
alert("Failed: " + reason);
});*/


}

3 EntryActivity_wxapi

package com.guwu.mai.wxapi;

import java.util.Map;

import org.json.JSONException;

import org.json.JSONObject;

import xu.li.cordova.wechat.Wechat;

import android.app.Activity;

import android.content.Intent;

import android.os.Bundle;

import android.util.Base64;

import android.util.Log;

import com.android.volley.RequestQueue;

import com.android.volley.Response;

import com.android.volley.VolleyError;

import com.android.volley.toolbox.StringRequest;

import com.android.volley.toolbox.Volley;

import com.tencent.mm.sdk.constants.ConstantsAPI;

import com.tencent.mm.sdk.modelbase.BaseReq;

import com.tencent.mm.sdk.modelbase.BaseResp;

import com.tencent.mm.sdk.modelmsg.SendAuth;

import com.tencent.mm.sdk.openapi.IWXAPIEventHandler;

/**

* Created by xu.liAthenaLightenedMyPath@gmail.com on 9/1/15.

*/

public class EntryActivity extends Activity implements IWXAPIEventHandler {

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

if (Wechat.wxAPI == null) {
startMainActivity();
} else {
Wechat.wxAPI.handleIntent(getIntent(), this);
}
}

@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);

if (Wechat.wxAPI == null) {
startMainActivity();
} else {
Wechat.wxAPI.handleIntent(intent, this);
}
}

@Override
public void onResp(BaseResp resp) {
Log.d(Wechat.TAG, resp.toString());

if (Wechat.currentCallbackContext == null) {
startMainActivity();
return ;
}

switch (resp.errCode) {
case BaseResp.ErrCode.ERR_OK:
switch (resp.getType()) {
case ConstantsAPI.COMMAND_SENDAUTH:


// auth(resp);

// break;

try {

//getAccessToken(((SendAuth.Resp) resp).code);

auth(resp);

} catch (Exception e) {

e.printStackTrace();
}
break;

case ConstantsAPI.COMMAND_PAY_BY_WX:
default:
Wechat.currentCallbackContext.success();
break;
}
break;
case BaseResp.ErrCode.ERR_USER_CANCEL:
Wechat.currentCallbackContext.error(Wechat.ERROR_USER_CANCEL);
break;
case BaseResp.ErrCode.ERR_AUTH_DENIED:
Wechat.currentCallbackContext.error(Wechat.ERROR_AUTH_DENIED);
break;
case BaseResp.ErrCode.ERR_SENT_FAILED:
Wechat.currentCallbackContext.error(Wechat.ERROR_SENT_FAILED);
break;
case BaseResp.ErrCode.ERR_UNSUPPORT:
Wechat.currentCallbackContext.error(Wechat.ERROR_UNSUPPORT);
break;
case BaseResp.ErrCode.ERR_COMM:
Wechat.currentCallbackContext.error(Wechat.ERROR_COMMON);
break;
default:
Wechat.currentCallbackContext.error(Wechat.ERROR_UNKNOWN);
break;
}

finish();
}

@Override
public void onReq(BaseReq req) {

finish();
}

protected void startMainActivity() {
Intent intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setPackage(getApplicationContext().getPackageName());
getApplicationContext().startActivity(intent);
}


/* protected void auth(BaseResp resp) {

SendAuth.Resp res = ((SendAuth.Resp) resp);

Log.d(Wechat.TAG, res.toString());

JSONObject response = new JSONObject();
try {
response.put("code", res.code);
response.put("state", res.state);
response.put("country", res.country);
response.put("lang", res.lang);
} catch (JSONException e) {
Log.e(Wechat.TAG, e.getMessage());
}

Wechat.currentCallbackContext.success(response);
}*/

//微信请求获取code码
public void auth(BaseResp resp) {
SendAuth.Resp res = ((SendAuth.Resp) resp);

Log.d(Wechat.TAG, res.toString());

//JSONObject response = new JSONObject();
getAccessTokenAndUid(res.code);

}
//拿code换取openid与access_token的方法
public void getAccessTokenAndUid(String code){

RequestQueue mQuene=Volley.newRequestQueue(EntryActivity.this);
String AppId="*****";
String secret="*****";
String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="+AppId+
"&secret="+secret+"&code="+code+"&grant_type=authorization_code";
//网络通信框架——Volley
StringRequest stringRequest=new StringRequest(0, url, new Response.Listener<String>() {

@Override
public void onResponse(String response) {
try {
JSONObject obj = new JSONObject(response);
String openid1=(String) obj.get("openid");
RSACoder RSA = new RSACoder();
Map<String, Object> keyMap = RSA.initKey();
//公钥
byte[] publicKey = RSA.getPublicKey(keyMap);
//byte[] publicKey = b;
//私钥
byte[] privateKey = RSACoder.getPrivateKey(keyMap);
byte[] code1 = RSACoder.encryptByPublicKey(openid1.getBytes(),
publicKey);
//加密后的数据
String openid=Base64.encodeToString(code1, Base64.DEFAULT);
Wechat.currentCallbackContext.success(openid);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// TODO Auto-generated method stub

Log.d("TAG",response);

}

}, new Response.ErrorListener() {

@Override
public void onErrorResponse(VolleyError error) {
// TODO Auto-generated method stub
Log.e("TAG",error.getMessage(),error);

}
});
mQuene.add(stringRequest);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息