LinkedIn APIと統合されたクライアント用のアプリケーションを作成しています。私はあまりにも多くの問題なしで認証を取得しましたが、すべてが機能しており、今は実際の要求をする必要があります。主に私はShare APIで作業しています。私は、ヘッダパラメータ(通常のOAuthのparamsで署名しようとしているLinkedIn APIに対するリクエストをOAuthすると401エラーが発生する
public void function signRequest(any req){
var headParams = Arguments.req.getParameters(true);
var bodyParams = Arguments.req.getParameters();
var secret = "#Variables.encoder.parameterEncodedFormat(getConsumer().getConsumerSecret())#&#Variables.encoder.parameterEncodedFormat(Arguments.req.getOAuthSecret())#";
var base = '';
params = Variables.encoder.encodedParameter(headParams, true, true);
params = "#params#&#Variables.encoder.parameterEncodedFormat(bodyParams[1].value)#";
secret = toBinary(toBase64(secret));
local.mac = createObject('java', 'javax.crypto.Mac').getInstance('HmacSHA1');
local.key = createObject('java', 'javax.crypto.spec.SecretKeySpec').init(secret, local.mac.getAlgorithm());
base = "#Arguments.req.getMethod()#&";
base = base & Variables.encoder.parameterEncodedFormat(Arguments.req.getRequestUrl());
base = "#base#&#Variables.encoder.parameterEncodedFormat(params)#";
//writeDump(base) abort;
local.mac.init(local.key);
local.mac.update(JavaCast('string', base).getBytes());
Arguments.req.addParameter('oauth_signature', toString(toBase64(mac.doFinal())), true);
}
:
public any function sendRequest(any req){
var param = false;
var headParams = [];
var bodyParams = [];
var call = new http(proxyserver='192.168.201.12', proxyport=8888);
var i = 1;
call.setUrl(Arguments.req.getRequestUrl());
call.setMethod(Arguments.req.getMethod());
getSigner().signRequest(Arguments.req);
headParams = Arguments.req.getParameters(true);
bodyParams = Arguments.req.getParameters();
if(arrayLen(bodyParams)){
call.addParam(
type='header',
name='Authorization',
value="OAuth#Variables.encoder.encodedParameter(Arguments.req.getParameters(true), true, false, true)#"
);
}
// Header parameters
if(!arrayLen(bodyParams)){
for(i=1; i<=arrayLen(headParams); i++){
param = headParams[i];
call.addParam(
type=Arguments.req.getParameterType(),
name=Variables.encoder.parameterEncodedFormat(param.name),
value=param.value
);
}
}
// Body parameters (should only be 1)
if(arrayLen(bodyParams)){
for(i=1; i<=arrayLen(bodyParams); i++){
param = bodyParams[i];
call.addParam(
type='xml',
value=param.value
);
}
}
return call.send().getPrefix();
}
Iは要求に署名する場合、私は、次の方法を使用します。私は、以下の方法を使用してHTTPコールを作成します)、bodyパラメーター(xml文字列)が含まれていますが、すべてが私に401エラーを出すので、要求のために署名されたベース文字列で何を使用すべきか疑問に思っていましたか?
ルーカス、私はAPIコネクタを実装するためにlinkedin-jを使い始めましたが、OAuthの実装を終えてAPIメソッドに移っても、私はこのエラーを受けていました: ' javax.xml.bind.JAXBException:com。 google.code.linkedinapi.schemaはObjectFactory.classまたはjaxb.indexを含んでいません。私はあなたがそれに対処しているかどうか、あなたはそれをどのように受け継がれているのだろうかと思っていました –
http://code.google.com/p/linkedin-j/downloads/listから入手したジップはどれですか? linkedin-j-1.0.415-binary.zipまたは1.0.429のベータ版バイナリを入手する必要があります。 *そこからJARをすべて取得し、サーバー上に置くべき場所に置いてください(セットアップに依存します、通常は#server.ColdFusion.ROOTDIR#\ lib \にあります)。次に、CFを再起動する必要があります。投稿したエラーから、JARの1つが見つからないようです。 – Lucas
私は実際にJavaLoaderを使用しており、JAXBが正しく動作するための特別な機能を組み込むためにlinkedin-j JARを再コンパイルする必要がありました。問題ページのIssue#53にありました。 –