2

なぜ私が最初に解決策をグーグルしようとしないのかとあなたが尋ねるかもしれないことを知っています、今私はすでにそれをグーグルで検索したと言うことができます、残念ながらそれはあまりにも多くの解決策とそれをするための異なる方法を出します。

私の状況はこのようなものです。私はそれらのクライアントが私のサービスを毎年購読できるようにしたいと思っています。

このリンクから、彼らはあまりにも多くの解決策を提案しました、私はどちらが私の状況に適しているかわかりません。そしてもちろん、無料サービス(ダイレクトデビットは月額料金が必要)を利用したいです。

つまり、クライアントがサブスクライブしているサービスの有効期限が切れると、毎年トランザクション番号をデータベースに保存し、クライアントに確認メールと会社のメールを自動的に送信します。

要約すれば、

  1. どちらの方法が私の状況に適しています。
  2. この場合、cronジョブが必要ですか?または、ペイパルが提供する定期的な支払いを使用する必要がありますか?
  3. リンクや例(つまり、サンドボックスでのコーディングの実装)はありますか?

よろしくお願いします。

4

2 に答える 2

0

こんにちは、ZF のコードを作成しました

public function processPaymentAction()
{
    $methodName = 'CreateRecurringPaymentsProfile';
    // from nvpHeader function
    $API_Endpoint = 'https://api-3t.sandbox.paypal.com/nvp';
    $version = '65.2';
    // But you can use here your own Sandbox API credentials of Business account
    // and you can get through Payapl Sandbox API Credentials Link on Left.

    $API_UserName = 'platfo_1255077030_biz_api1.gmail.com';
    $API_Password = '1255077037';
    $API_Signature = 'Abg0gYcQyxQvnf2HDJkKtA-p6pqhA1k-KTYE0Gcy1diujFio4io5Vqjf';
    $subject = '';
    global $nvp_Header, $AUTH_token, $AUTH_signature, $AUTH_timestamp;
    $nvpHeaderStr = "";

    //pr($this->data);die;
    //$this->data['User']['paymentType']
    $paymentType = urlencode('Sale');
    $firstName = urlencode("Jaskaran");
    $lastName = urlencode("Singh");
    $creditCardType = urlencode("Visa");
    $creditCardNumber = urlencode("4798720058660243");
    $expDateMonth =urlencode(11);

    // Month must be padded with leading zero
    $padDateMonth = str_pad($expDateMonth, 2, '0', STR_PAD_LEFT);

    $expDateYear = urlencode(2015);
    $cvv2Number = urlencode(962);
    $address1 = urlencode("1 Main St");
    $address2 = urlencode("");
    $city = urlencode("San Jose");
    $state = urlencode("CA");
    $zip = urlencode(95131);
    $amount = urlencode(1.00);

//  $init_amount = urlencode($this->data['User']['pack_price']);

    $currencyCode="USD";

    $profileDesc = urlencode("Welcome to the world of shopping where you get everything");
    $billingPeriod = urlencode("Week");
    $billingFrequency = urlencode(4);
    $totalBillingCycles = urlencode(0);

    ################# Commented as we need to define through Admin ##############

    $profileStartDateDay = 10;
    // Day must be padded with leading zero
    $padprofileStartDateDay = str_pad($profileStartDateDay, 2, '0', STR_PAD_LEFT);

    $profileStartDateMonth = 02;
    // Month must be padded with leading zero
    $padprofileStartDateMonth = str_pad($profileStartDateMonth, 2, '0', STR_PAD_LEFT);

    $profileStartDateYear = 2015;

    $profileStartDate = urlencode($profileStartDateYear . '-' . $padprofileStartDateMonth . '-' . $padprofileStartDateDay . 'T00:00:00Z');

    //string from nvpHeader
    $nvpHeaderStr = "&PWD=".urlencode($API_Password)."&USER=".urlencode($API_UserName)."&SIGNATURE=".urlencode($API_Signature);

    $nvpstr="&AMT=$amount&CREDITCARDTYPE=$creditCardType&ACCT=$creditCardNumber&EXPDATE=". $padDateMonth.$expDateYear."&CVV2=$cvv2Number&FIRSTNAME=$firstName&LASTNAME=$lastName&STREET=$address1&CITY=$city&STATE=$state".
    "&ZIP=$zip&COUNTRYCODE=US&CURRENCYCODE=$currencyCode&PROFILESTARTDATE=$profileStartDate&DESC=$profileDesc&BILLINGPERIOD=$billingPeriod&BILLINGFREQUENCY=$billingFrequency&TOTALBILLINGCYCLES=$totalBillingCycles";

    $nvpstr = $nvpHeaderStr.$nvpstr;
    //check if version is included in $nvpStr else include the version.
    if(strlen(str_replace('VERSION=','', strtoupper($nvpstr))) == strlen($nvpstr)) 
    {
        $nvpstr = "&VERSION=" . urlencode($version) . $nvpstr;
    }
    $nvpreq="METHOD=".urlencode($methodName).$nvpstr;


    $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=”.urlencode($methodName).$nvpStr;

    //setting the nvpreq as POST FIELD to curl
    curl_setopt($ch,CURLOPT_POSTFIELDS,$nvpreq);

    //getting response from server
    $response = curl_exec($ch);

    //convrting NVPResponse to an Associative Array
    $nvpResArray=$this->deformatNVP($response);
    $nvpReqArray=$this->deformatNVP($nvpreq);


    if (curl_errno($ch)) 
    {
        echo "cURL Error";
        die;
        // moving to display page to display curl errors
        $_SESSION['curl_error_no']=curl_errno($ch) ;
        $_SESSION['curl_error_msg']=curl_error($ch);
        //$location = "APIError.php";
        //header("Location: $location");
    } 
    else 
    {
        //closing the curl
        curl_close($ch);
    }

    #### Checking error ###
    if(!empty($nvpResArray))
    {
        if($nvpResArray['ACK'] == 'Failure')
        {
            echo "ERROR : ". $errmsg = $nvpResArray["L_LONGMESSAGE0"];
            echo "<pre>";
            print_r($nvpResArray);
            die;
        }
    }

    // Print this array you will get some necessary info
    ################ Starting data insert##################

    if($nvpResArray['ACK'] == 'Success')
    {
        echo 'Success';
        print_r($nvpResArray);
        die;
        // save data into tables for Recurring Profile
    }



}

############### Function deformatNVP #########
/** This function will take NVPString and convert it to an Associative Array and it will decode the response.
 * It is usefull to search for a particular key and displaying arrays.
 * @nvpstr is NVPString.
 * @nvpArray is Associative Array.
 */
function deformatNVP ($nvpstr)
{
    $intial = 0;
    $nvpArray = array();
    while (strlen($nvpstr)) {
        //postion of Key
        $keypos = strpos($nvpstr, '=');
        //position of value
        $valuepos = strpos($nvpstr, '&') ? strpos($nvpstr, '&') : strlen(
        $nvpstr);
        /*getting the Key and Value values and storing in a Associative Array*/
        $keyval = substr($nvpstr, $intial, $keypos);
        $valval = substr($nvpstr, $keypos + 1, $valuepos - $keypos - 1);
        //decoding the respose
        $nvpArray[urldecode($keyval)] = urldecode($valval);
        $nvpstr = substr($nvpstr, $valuepos + 1, strlen($nvpstr));
    }
    return $nvpArray;
}
function formAutorization ($auth_token, $auth_signature, $auth_timestamp)
{
    $authString = "token=" . $auth_token . ",signature=" . $auth_signature .
     ",timestamp=" . $auth_timestamp;
    return $authString;
}
于 2015-01-10T21:10:56.690 に答える
0

PayPal Payments Pro と Direct Payment API を使用して、最初のクレジット カード取引を処理できます。次に、トランザクションをシステムに保存し、cron ジョブを実行するようにシステムを設定し、参照トランザクション API 呼び出しを実行して購入者に再度請求することができます。これにより、実際に PayPal を通じてサービスを利用しなくても、定期的な支払いプロファイルを設定する効果が得られます。

ただし、コーディングを減らし、cron ジョブなどを実行するようにシステムをセットアップしたい場合は、PayPal の定期支払い/定期請求サービスにサインアップするだけで、PayPal に API 呼び出しを行うだけで設定できます。プロファイルをアップします。その後、PayPal は、買い手に請求する必要があるときに、買い手に請求を行います。

于 2013-02-28T14:18:42.130 に答える