私は現在、PayPal のエクスプレス チェックアウトを支払いサービスとして実装することを含む Web プロジェクトに取り組んでいます。プロジェクトは C# で、私は Visual Studio 2010 と PayPal API の SOAP バージョンを使用しています。私が使用している API のバージョンは 91.0 で (これを他のバージョンに切り替えようとしましたが、問題は残ります)、開発を行うためにサンドボックスで作業しています。
SOAP API 開発者ガイドで、Web 参照としてプロジェクトにサービスをインポートするための WSDL を見つけました。エクスプレス チェックアウトの支払いフローのすべてのステップを実行できます。リクエストを作成することは、サービスからの応答を使用して公園を散歩することですが、そうではありません。
何らかの理由で、応答のデータ フィールドが期待どおりに自動的に入力されません。有用なフィールドはすべて null です。このため、適切なオブジェクトにアクセスするだけでなく、必要なデータを取得するために、応答内の XML 文字列を手動で解析する必要があります。言うまでもなく、私はこのように働きたくありません。
支払いフローの最後のステップ (DoExpressCheckout) の簡単な例:
PayPalAPIAASoapBinding apiaa = new PayPalAPIAASoapBinding();
apiaa.RequesterCredentials = ... ;
DoExpressCheckoutPaymentReq decreq = new DoExpressCheckoutPaymentReq();
decreq.DoExpressCheckoutPaymentRequest = new DoExpressCheckoutPaymentRequestType();
/* Filling in all the fields required */
DoExpressCheckoutPaymentResponseType decres = apiaa.DoExpressCheckoutPayment(decreq);
通常、decres オブジェクトには、必要なすべての詳細を含むフィールド DoExpressCheckoutPaymentResponseDetails があります。マニュアルと私が期待することによると、たとえば、次のように応答で返されたトークンを読み取ることができるはずです。
string token = decres.DoExpressCheckoutPaymentResponseDetails.Token;
代わりに、DoExpressCheckoutPaymentResponseDetails フィールドは null であり、次のようなトークンを取得しました。
string token = decres.Any.ChildNodes[0].InnerText;
PayPal サービスからエラー コードが表示されません。
さらに奇妙なのは、TransactionSearch 関数を使用して複数のトランザクションを検索する場合です。関数が 50 件のトランザクションを返すとします。49 個のトランザクションが、API ドキュメントを読んだ後に見つかるはずの正しいオブジェクトに入力されています。ただし、最初のトランザクションはそうではなく、応答の Any フィールドから手動で解析する必要があります。
誰かが同じまたは同様の問題に遭遇したことがありますか?
Fyi: 私は Web アプリケーション PHP のプログラミングに慣れています。特定の要求に応じて、C# でこれを行っています。これは標準的な C# または Visual Studio の動作ですか (疑わしい)、または Visual Studio で SOAP サービスの側面を間違った方法で実行/構成していますか?