<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: recurring payments code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Fri, 25 Jul 2008 02:49:47 GMT</pubDate>
    <description>DZone Snippets: recurring payments code</description>
    <item>
      <title>Creating PayPal recurring payments profile with activemerchant</title>
      <link>http://snippets.dzone.com/posts/show/5292</link>
      <description>&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;# simple extension to ActiveMerchant for basic support of recurring payments with Express Checkout API&lt;br /&gt;# &lt;br /&gt;# NOTE: set pem_file when loading&lt;br /&gt;module ActiveMerchant #:nodoc:&lt;br /&gt;  module Billing #:nodoc:&lt;br /&gt;    class PaypalExpressRecurringGateway &lt; Gateway&lt;br /&gt;      include PaypalCommonAPI&lt;br /&gt;&lt;br /&gt;      LIVE_REDIRECT_URL = 'https://www.paypal.com/cgibin/webscr?cmd=_customer-billing-agreement&amp;token='&lt;br /&gt;      TEST_REDIRECT_URL = 'https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_customer-billing-agreement&amp;token='&lt;br /&gt;&lt;br /&gt;      def redirect_url&lt;br /&gt;        test? ? TEST_REDIRECT_URL : LIVE_REDIRECT_URL&lt;br /&gt;      end&lt;br /&gt;&lt;br /&gt;      def redirect_url_for(token)&lt;br /&gt;        "#{redirect_url}#{token}"&lt;br /&gt;      end&lt;br /&gt;&lt;br /&gt;      def setup_agreement(description, return_url, cancel_url)&lt;br /&gt;        commit 'SetCustomerBillingAgreement', build_setup_request(description, return_url, cancel_url)&lt;br /&gt;      end&lt;br /&gt;&lt;br /&gt;      def create_profile(token, description, period, cycles, amount)&lt;br /&gt;        commit 'CreateRecurringPaymentsProfile', build_create_profile_request(token, description, period, cycles, amount)&lt;br /&gt;      end&lt;br /&gt;&lt;br /&gt;      def get_profile_details(profile_id)&lt;br /&gt;        commit 'GetRecurringPaymentsProfileDetails', build_get_profile_details_request(profile_id)&lt;br /&gt;      end&lt;br /&gt;&lt;br /&gt;    private&lt;br /&gt;      def build_setup_request(description, return_url, cancel_url)&lt;br /&gt;        xml = Builder::XmlMarkup.new :indent =&gt; 2&lt;br /&gt;        xml.tag! 'SetCustomerBillingAgreementReq', 'xmlns' =&gt; PAYPAL_NAMESPACE do&lt;br /&gt;          xml.tag! 'SetCustomerBillingAgreementRequest', 'xmlns:n2' =&gt; EBAY_NAMESPACE do&lt;br /&gt;            xml.tag! 'n2:Version', 50&lt;br /&gt;            xml.tag! 'n2:SetCustomerBillingAgreementRequestDetails' do&lt;br /&gt;              xml.tag! 'n2:BillingAgreementDetails' do&lt;br /&gt;                xml.tag! 'n2:BillingType', 'RecurringPayments'&lt;br /&gt;                xml.tag! 'n2:BillingAgreementDescription', description&lt;br /&gt;              end&lt;br /&gt;              xml.tag! 'n2:ReturnURL', return_url&lt;br /&gt;              xml.tag! 'n2:CancelURL', cancel_url&lt;br /&gt;            end&lt;br /&gt;          end&lt;br /&gt;        end&lt;br /&gt;        xml.target!&lt;br /&gt;      end&lt;br /&gt;&lt;br /&gt;      def build_create_profile_request(token, description, period, cycles, money)&lt;br /&gt;        xml = Builder::XmlMarkup.new :indent =&gt; 2&lt;br /&gt;        xml.tag! 'CreateRecurringPaymentsProfileReq', 'xmlns' =&gt; PAYPAL_NAMESPACE do&lt;br /&gt;          xml.tag! 'CreateRecurringPaymentsProfileRequest', 'xmlns:n2' =&gt; EBAY_NAMESPACE do&lt;br /&gt;            xml.tag! 'n2:Version', 50&lt;br /&gt;            xml.tag! 'n2:CreateRecurringPaymentsProfileRequestDetails' do&lt;br /&gt;              xml.tag! 'Token', token&lt;br /&gt;              xml.tag! 'n2:RecurringPaymentsProfileDetails' do&lt;br /&gt;                xml.tag! 'n2:BillingStartDate', Time.now.utc.iso8601&lt;br /&gt;              end&lt;br /&gt;              xml.tag! 'n2:ScheduleDetails' do&lt;br /&gt;                xml.tag! 'n2:Description', description&lt;br /&gt;                xml.tag! 'n2:PaymentPeriod' do&lt;br /&gt;                  xml.tag! 'n2:BillingPeriod', 'Day'&lt;br /&gt;                  xml.tag! 'n2:BillingFrequency', period&lt;br /&gt;                  xml.tag! 'n2:TotalBillingCycles', cycles&lt;br /&gt;                  xml.tag! 'n2:Amount', amount(money), 'currencyID' =&gt; currency(money)&lt;br /&gt;                end&lt;br /&gt;              end&lt;br /&gt;            end&lt;br /&gt;          end&lt;br /&gt;        end&lt;br /&gt;&lt;br /&gt;        xml.target!&lt;br /&gt;      end&lt;br /&gt;&lt;br /&gt;      def build_get_profile_details_request(profile_id)&lt;br /&gt;        xml = Builder::XmlMarkup.new :indent =&gt; 2&lt;br /&gt;        xml.tag! 'GetRecurringPaymentsProfileDetailsReq', 'xmlns' =&gt; PAYPAL_NAMESPACE do&lt;br /&gt;          xml.tag! 'GetRecurringPaymentsProfileDetailsRequest', 'xmlns:n2' =&gt; EBAY_NAMESPACE do&lt;br /&gt;            xml.tag! 'n2:Version', 50&lt;br /&gt;            xml.tag! 'ProfileID', profile_id&lt;br /&gt;          end&lt;br /&gt;        end&lt;br /&gt;&lt;br /&gt;        xml.target!&lt;br /&gt;      end&lt;br /&gt;&lt;br /&gt;      def build_response(success, message, response, options = {})&lt;br /&gt;        PaypalExpressResponse.new(success, message, response, options)&lt;br /&gt;      end&lt;br /&gt;&lt;br /&gt;    end&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Sun, 30 Mar 2008 15:37:27 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5292</guid>
      <author>dseverin ()</author>
    </item>
  </channel>
</rss>
