1

私の現在のプロジェクトでは、ユーザーはペイパル アカウントに登録せずにメンバーシップに登録できます。

ユーザーのユーザー名とパスワードは、PayPal ではなく、私自身のアプリケーションによって作成および管理されます。

そのサブスクリプションをキャンセルする hTMl フォームを作成する方法を誰か教えてもらえますか? txn_id??を送信してサブスクリプションをキャンセルできますか?

IPN でこの情報を取得できると思います。

また、私は DBA であり、実際には開発者ではないことにも言及しておく必要があります。

前もって感謝します。

4

2 に答える 2

0

paypal api メソッド ManageRecurringPaymentsProfileStatus (API Operation NVP) を使用し、ACTION パラメータを使用して次のことができます。

  • キャンセル – アクティブまたは一時停止状態のプロファイルのみをキャンセルできます。
  • サスペンド – アクティブ状態のプロファイルのみをサスペンドできます。
  • 再アクティブ化 – 一時停止状態のプロファイルのみを再アクティブ化できます。

Paypal ドキュメント - https://developer.paypal.com/docs/classic/api/merchant/ManageRecurringPaymentsProfileStatus_API_Operation_NVP/

定期的なプロファイルを作成するには、次の (PHP) の例に従います。

// PayPal に送信される SetExpressCheckout のパラメータ
$padata['L_BILLINGAGREEMENTDESCRIPTION0'] = '商品説明'; $padata['L_BILLINGAGREEMENTDESCRIPTION0'] = $padata['L_BILLINGAGREEMENTDESCRIPTION0'] . ' $'.$product->price.'/month'; $padata['L_PAYMENTREQUEST_0_DESC0'] = $padata['L_BILLINGAGREEMENTDESCRIPTION0'] . ' $'.$product->price.'/month';
$padata['PAYMENTREQUEST_0_NOTIFYURL'] = 'http://site_url/paypal/ipn'; $padata['PAYMENTREQUEST_0_DESC'] = $product->name; $padata['RETURNURL'] = 'http://site_url/paypal/returnurl'; $padata['CANCELURL'] = 'http://site_url/paypal/cancelurl';
$padata['PAYMENTREQUEST_0_CURRENCYCODE'] = 'USD'; $padata['PAYMENTREQUEST_0_PAYMENTACTION'] = 'SALE'; $padata['PAYMENTREQUEST_0_ITEMAMT'] = $product->price;
$padata['PAYMENTREQUEST_0_AMT'] = $product->price;
$padata['L_BILLINGTYPE0'] = 'RecurringPayments';
$padata['L_PAYMENTREQUEST_0_NAME0'] = $product->name;
$padata['L_PAYMENTREQUEST_0_NUMBER0']= '322';
$padata['L_PAYMENTREQUEST_0_QTY0'] = '1';
$padata['L_PAYMENTREQUEST_0_AMT0'] = $product->price;
$paypal_data = http_build_query($padata); $httpParsedResponseAr = $this->PPHttpPost('SetExpressCheckout', $paypal_data); // Paypal から受信したメッセージに従って応答します if("SUCCESS" == strtoupper($httpParsedResponseAr["ACK"]) || "SUCCESSWITHWARNING" == strtoupper($httpParsedResponseAr["ACK"])){ // トークンを受け取った PayPal ストアにユーザーをリダイレクトします。 $paypalurl ='https://www.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token='.$httpParsedResponseAr["TOKEN"].''; header('Location:'.$paypalurl); }そうしないと{ echo 'エラー : '.urldecode($httpParsedResponseAr["L_LONGMESSAGE0"]).'';
}

ページリターン URL:

$hosteddata['L_BILLINGAGREEMENTDESCRIPTION0'] = '定期的な説明'; 
$hosteddata['L_BILLINGAGREEMENTDESCRIPTION0'] = $hosteddata['L_BILLINGAGREEMENTDESCRIPTION0'] . ' $'.$pr->price.'/month';
$hosteddata['L_PAYMENTREQUEST_0_NAME0'] = $pr->name;
$hosteddata['PROFILEREFERENCE'] = $GetExpressCheckoutDetails['L_PAYMENTREQUEST_0_NUMBER0'];
$hosteddata['PROFILESTARTDATE'] = date('Ymd') . 'T' . date('H:i:s').'Z';
$hosteddata['SUBSCRIBERNAME'] = $GetExpressCheckoutDetails['FIRSTNAME'] . ' ' . $GetExpressCheckoutDetails['LASTNAME'];
$hosteddata['TOKEN'
$hosteddata['DESC'] = $hosteddata['L_BILLINGAGREEMENTDESCRIPTION0'];
$hosteddata['AMT'] = $pr->price;
$hosteddata['BILLINGPERIOD'] = '月';
$hosteddata['BILLINGFREQUENCY'] = '1';
$hosteddata['TOTALBILLINGCYCLES'] = '12';
$hosteddata['REGULARTOTALBILLINGCYCLES'] = '1';
$hosteddata['VERSION'] = '74.0';
$hosteddata['MAXFAILEDPAYMENTS'] = '1';
$hosteddata['L_PAYMENTREQUEST_0_QTY0'] = '1';
$hosteddata['L_BILLINGTYPE0'] = ' 定期支払い';
$hosteddata['L_PAYMENTREQUEST_0_ITEMCATEGORY0'] = 'デジタル';
$hosteddata['L_PAYMENTREQUEST_0_AMT0'] = $pr->price;
$hosteddata['INITAMT'] = $pr->price;
$hosteddata['L_PAYMENTREQUEST_0_NUMBER0'] = $pr->id;
$hosteddata['PAYMENTREQUEST_0_NOTIFYURL'] = 'http://site_url/paypal/ipn';
$paypal_data = http_build_query($hosteddata); $hosted_saas_response = $this->PPHttpPost('CreateRecurringPaymentsProfile', $paypal_data);

別の方法を使用してパラメーターをペイパルに投稿しました

プライベート関数 PPHttpPost( $methodName_, $nvpStr_ ) {
$api_username = 'yourpaypal@email.com'; $api_password = 'QWEQWEWQEQWEQEQWE';
$api_signature = 'WQEQWEQWEQWEWQEQWEQWEQWEQWEQWE.cT';
$api_endpoint = "https://api-3t.paypal.com/nvp";
$バージョン = '124.0'; $ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $api_endpoint);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
$nvpreq = "METHOD=$methodName_&VERSION=$version&PWD=$api_password&USER=$api_username&SIGNATURE=$api_signature&$nvpStr_";
curl_setopt($ch, CURLOPT_POSTFIELDS, $nvpreq);
$httpResponse = curl_exec($ch); if(!$httpResponse) { exit("$methodName_ が失敗しました: ".curl_error($ch).'('.curl_errno($ch).')');
} // 応答の詳細を抽出します。 $httpResponseAr = 爆発("&", $httpResponse);
$httpParsedResponseAr = 配列(); foreach ($httpResponseAr as $i => $value) { $tmpAr = 爆発("=", $値); if(sizeof($tmpAr) > 1) { $httpParsedResponseAr[$tmpAr[0]] = $tmpAr[1]; } } if((0 == sizeof($httpParsedResponseAr)) || !array_key_exists('ACK', $httpParsedResponseAr)) {
exit("$api_endpoint への POST リクエスト ($nvpreq) に対する HTTP レスポンスが無効です。");
} $httpParsedResponseAr を返します。
}

キャンセルするもう 1 つの方法は、ユーザー アカウント内にあります。

  1. PayPal アカウントにログインします。
  2. ページの上部にある [プロフィール] をクリックします。
  3. [私のお金] をクリックします。
  4. [私の事前承認済み支払い] セクションで [更新] をクリックします。
  5. [キャンセル]、[自動請求をキャンセル]、または [サブスクリプションをキャンセル] をクリックして、指示に従います。
于 2015-10-22T05:50:22.047 に答える