カテゴリー : 2011年 11月

[Rails] PayPal API を使うための「Active Merchant」

Ruby on Railsにて、PayPal API を使うなら「Active Merchant」が便利です。

Active Merchantを使うときに、参考になりそうなドキュメント類をまとめました。(随時更新予定)

・公式:Active Merchant

・GitHub:Shopify/active_merchant – GitHub

サンプルコード

#146 PayPal Express Checkout – RailsCasts

Twiwt:Blog / jugyo : Rails3 + Mongoid + ActiveMerchant で Paypal Express Checkout

Paypal express transactions with ruby on rails | Web Tempest

PayPal Recurring Billing with ActiveMerchant in Ruby on Rails @ Raymond Law

その他、参考情報

PayPal の SetExpressCheckout API には、「LandingPage」というオプションがあります。これは、ユーザーが PayPal に移動したとき最初に表示するページを指定するものです。指定できるのは「Login」と「Billing」の2種類です。

Login: PayPal アカウントログインページ
Billing: PayPal アカウントを持たないユーザー向けクレジットカード支払いページ

・引用元:PayPal をもっとわかりやすくする方法 | 開発者ブログ | CMONOS

以上です。

[API] ActiveMerchant の PaypalExpressCheckout での決済後のtokenパラメータの一覧

Ruby on Railsで、PayPal API を扱える ActiveMerchant の PaypalExpressCheckout での決済後のtokenパラメータの一覧をメモ。

#<ActiveMerchant::Billing::PaypalExpressResponse:0x000000046d3658 @params={
"timestamp"=>"2011-11-27T08:55:13Z",
"ack"=>"Success",
"correlation_id"=>"5df56fe7b2c0f",
"version"=>"62.0",
"build"=>"2271164",
"token"=>"EC-9VP17258D85027039",
"payer"=>"buyer_1319355006_per@gmail.com",
"payer_id"=>"PR6LJ4NXR7NDQ",
"payer_status"=>"verified",
"salutation"=>nil,
"first_name"=>"Test",
"middle_name"=>nil,
"last_name"=>"User",
"suffix"=>nil,
"payer_country"=>"US",
"payer_business"=>nil,
"name"=>"Test User",
"street1"=>"1 Main St",
"street2"=>nil,
"city_name"=>"San Jose",
"state_or_province"=>"CA",
"country"=>"US",
"country_name"=>"United States",
"postal_code"=>"95131",
"address_owner"=>"PayPal",
"address_status"=>"Confirmed",
"order_total"=>"1",
"order_total_currency_id"=>"USD",
"shipping_total"=>"0.00",
"shipping_total_currency_id"=>"USD",
"handling_total"=>"0.00",
"handling_total_currency_id"=>"USD",
"tax_total"=>"0.00",
"tax_total_currency_id"=>"USD",
"phone"=>nil,
"address_id"=>nil,
"external_address_id"=>nil,
"insurance_total"=>"0.00",
"insurance_total_currency_id"=>"USD",
"shipping_discount"=>"0.00",
"shipping_discount_currency_id"=>"USD",
"insurance_option_offered"=>"false",
"seller_details"=>nil,
"payment_request_id"=>nil,
"order_url"=>nil,
"soft_descriptor"=>nil,
"checkout_status"=>"PaymentActionNotInitiated",
"Token"=>"EC-9VP17258D85027039",
 
"PayerInfo"=>{
  "Payer"=>"buyer_1319355006_per@gmail.com",
  "PayerID"=>"PR6LJ4NXR7NDQ",
  "PayerStatus"=>"verified",
  "PayerName"=>{
    "Salutation"=>nil,
    "FirstName"=>"Test",
    "MiddleName"=>nil,
    "LastName"=>"User",
    "Suffix"=>nil
  },
  "PayerCountry"=>"US",
  "PayerBusiness"=>nil,
  "Address"=>{
    "Name"=>"Test User",
    "Street1"=>"1 Main St",
    "Street2"=>nil,
    "CityName"=>"San Jose",
    "StateOrProvince"=>"CA",
    "Country"=>"US",
    "CountryName"=>"United States",
    "PostalCode"=>"95131",
    "AddressOwner"=>"PayPal",
    "AddressStatus"=>"Confirmed"
   }
},
 
"PaymentDetails"=>{
  "OrderTotal"=>"1",
  "ShippingTotal"=>"0.00",
  "HandlingTotal"=>"0.00",
  "TaxTotal"=>"0.00",
  "ShipToAddress"=>{
    "Name"=>"Test User",
    "Street1"=>"1 Main St",
    "Street2"=>nil,
    "CityName"=>"San Jose",
    "StateOrProvince"=>"CA",
    "Country"=>"US",
    "CountryName"=>"United States",
    "Phone"=>nil,
    "PostalCode"=>"95131",
    "AddressID"=>nil,
    "AddressOwner"=>"PayPal",
    "ExternalAddressID"=>nil,
    "AddressStatus"=>"Confirmed"
  },
  "InsuranceTotal"=>"0.00",
  "ShippingDiscount"=>"0.00",
  "InsuranceOptionOffered"=>"false",
  "SellerDetails"=>nil,
  "PaymentRequestID"=>nil,
  "OrderURL"=>nil,
  "SoftDescriptor"=>nil
},
 
"CheckoutStatus"=>"PaymentActionNotInitiated"
},
 
@message="Success",
@success=true,
@test=true,
@authorization=nil,
@fraud_review=false,
@avs_result={
  "code"=>nil,
  "message"=>nil,
  "street_match"=>nil,
  "postal_match"=>nil
},
@cvv_result={
  "code"=>nil,
  "message"=>nil
}>

[jQuery] 外部サイトへのリンクを別ウィンドウで開く方法

jQueryを使って、外部サイトへのリンクを別ウィンドウで開く方法を調べたのでメモ。

■ サンプルコード

$(document).ready( function () {
  $('.popup').click(function(){
    window.open(this.href, "WindowName","width=1000,height=600,resizable=yes,scrollbars=yes");
    return false;
  });
});

【参考】

jQueryで「window.open」タイプのポップアップウィンドウ方法 | E2 DESIGNERS BLOG:HTML,CSS,JavaScript,jQuery,FlashなどWebデザインに関するネタ紹介/株式会社E2 はてなブックマーク - jQueryで「window.open」タイプのポップアップウィンドウ方法 | E2 DESIGNERS BLOG:HTML,CSS,JavaScript,jQuery,FlashなどWebデザインに関するネタ紹介/株式会社E2

jQueryを使って、外部サイトへのリンクだけ別ウィンドウで開く方法|AdDe – 静岡のデザイン制作会社アドテクニカのデザイナーブログ はてなブックマーク - jQueryを使って、外部サイトへのリンクだけ別ウィンドウで開く方法|AdDe - 静岡のデザイン制作会社アドテクニカのデザイナーブログ

「Jenkinsではじめるビルド職人入門」が11月中は無料でダウンロードできる

「Jenkinsではじめるビルド職人入門」が11月中は無料でダウンロードできるみたいです。

・DL:Jenkinsではじめるビルド職人入門 | Gihyo Digital Publishing はてなブックマーク - Jenkinsではじめるビルド職人入門 | Gihyo Digital Publishing

日本初のJenkins解説書『Jenkins実践入門 ~ビルド・テスト・デプロイを自動化する技術』の発売記念として無料キャンペーンをしているらしいので、これを機にJenkinsデビューしたいものですね。

[Heroku] “Heroku Git error, try again shortly.”

Heroku へ git push したら、下記のようなエラーが発生しました。

$ git push heroku master
 
 !  Heroku Git error, try again shortly.
 !  We've been notified, see http://support.heroku.com if the problem persists.
 
fatal: The remote end hung up unexpectedly

Heroku側に問題がある可能性があるので、http://support.heroku.com にアクセスして、障害が発生しているか確認します。

・ここも確認する:Heroku | Status はてなブックマーク - Heroku | Status

僕の場合は数分ぐらい時間をおいて、再度 git push したら正常にプッシュされました。

以上です。

[jQuery] グルーポン系サイトでよく見掛けるカウントダウンタイマーのサンプルコード

jQueryで、グルーポン系サイトでよく見掛けるカウントダウンタイマーを実装しようと、プラグインを探していたのですが、百式さんのライフハックにプラグイン無しでも簡単に実装できそうだったので、一部書き換えてご紹介します。

・元ネタ:グルーポン系サイトでよく見られる「終了まで○時間○分○秒」をjQueryで実装してみる | IDEA*IDEA

■ 元のコード

<script type="text/javascript">
$(function() {
  countDown();
});
function countDown() {
var target = new Date("August 26,2010 11:00:00");
var today = new Date();
var h = Math.floor(((target-today)%(24*60*60*1000))/(60*60*1000))
var m = Math.floor(((target-today)%(24*60*60*1000))/(60*1000))%60
var s = Math.floor(((target-today)%(24*60*60*1000))/1000)%60%60
$("#TimeLeft").text(h+'時間'+m+'分'+s+'秒');
  setTimeout('countDown()', 1000);
}
</script>

■ カスタマイズ(日/時/分/秒 表記)

<script type="text/javascript">
  $(function() {
    countDown();
    });
    function countDown() {
    var startDateTime = new Date();
    var endDateTime = new Date("November 26,2011 11:00:00");
    var d = Math.floor((endDateTime-startDateTime)/(24*60*60*1000))
    var h = Math.floor(((endDateTime-startDateTime)%(24*60*60*1000))/(60*60*1000))
    var m = Math.floor(((endDateTime-startDateTime)%(24*60*60*1000))/(60*1000))%60
    var s = Math.floor(((endDateTime-startDateTime)%(24*60*60*1000))/1000)%60%60
    $("#TimeLeft").text(d+'日'+h+'時間'+m+'分'+s+'秒');
      setTimeout('countDown()', 1000);
    }
</script>

以上です。
 

■ カウントダウンタイマーを実装する方法の紹介記事

その他、JavaScript/jQuery で、カウントダウンタイマーの実装について書いてある記事。

jQuery Countdown

jQuery Countdown を使ってカウントダウンタイマーを表示する | バシャログ。

jQueryで時間をカウントダウンするJavaScript「jCountr」|skuare.net


参考情報

getTime – JavaScriptリファレンス:ITpro

JavaScript による日付・時刻・時間の計算・演算のまとめ – hoge256ブログ

[Rails] AbstractController::DoubleRenderError

Ruby on Rails 3.1 にて、AbstractController::DoubleRenderError というエラーが発生しました。

■ エラー内容

Render and/or redirect were called multiple times in this action. Please note that you may only call render OR redirect, and at most once per action. Also note that neither redirect nor render terminate execution of the action, so if you want to exit an action after redirecting, you need to do something like “redirect_to(…) and return”.

下記のように、複数 render 処理が実行させるとエラーになります。

render :index
render :show # ここまで処理されて render 重複エラー

render処理の後に、そこで動作を終了させたい場合は return を書かなければいけません。

render :index and return # ここで処理が終了
render :show # ここは処理されない

以上です。

【参考】

ruby on rails – AbstractController::DoubleRenderError that shouldn’t be – Stack Overflow はてなブックマーク - ruby on rails - AbstractController::DoubleRenderError that shouldn't be - Stack Overflow

[Rails] タイムゾーン(Time Zone) を日本標準時(JST)に設定する方法

Railsにて、タイムゾーンを 世界協定時(UTC)から日本標準時(JST)に設定する方法を調べたのでメモ。

■ config/environments/production.rb

# time zone
config.time_zone = 'Tokyo'

・参考:タイムゾーンはどのように設定しておこうか… – ザリガニが見ていた…。 はてなブックマーク - タイムゾーンはどのように設定しておこうか... - ザリガニが見ていた...。

[コラム] Ruby on Rails作者 David Heinemeier Hansson へのインタビュー記事 – 小飼弾のアルファギークに逢いたい

先日Twitterで「Rails使いはこの記事ぐらいは読んでおいた方が良いんじゃないかな」というツイートを見掛けたので、該当の記事「Ruby on Rails作者 David Heinemeier Hansson へのインタビュー記事 – 小飼弾のアルファギークに逢いたい」を読みました。
 

■ 小飼弾のアルファギークに逢いたい♥:#2

Ruby on Rails作者 David Heinemeier Hansson(前編) RubyでRailsを書いたわけ|gihyo.jp … 技術評論社 はてなブックマーク - 小飼弾のアルファギークに逢いたい♥:#2 Ruby on Rails作者 David Heinemeier Hansson(前編) RubyでRailsを書いたわけ|gihyo.jp … 技術評論社

Ruby on Rails作者 David Heinemeier Hansson(中編) 37signalsってどんな会社?|gihyo.jp … 技術評論社 はてなブックマーク - 小飼弾のアルファギークに逢いたい♥:#2 Ruby on Rails作者 David Heinemeier Hansson(中編) 37signalsってどんな会社?|gihyo.jp … 技術評論社

Ruby on Rails作者 David Heinemeier Hansson(後編) 「アーキテクト」って言葉を使ったら負け|gihyo.jp … 技術評論社 はてなブックマーク - 小飼弾のアルファギークに逢いたい♥:#2 Ruby on Rails作者 David Heinemeier Hansson(後編) 「アーキテクト」って言葉を使ったら負け|gihyo.jp … 技術評論社
 

書籍「小さなチーム、大きな仕事」を一年ぐらい前に読んでるのですが、働き始めてから読むとまた違った見方ができそうなので、近々、読み返そうと思います。
 

[資料] 「プログラマを一生の仕事にできるビジネスモデルで目指す未来のビジョン」ソニックガーデン代表取締役社 倉貫義人氏

ソニックガーデン代表取締役社 倉貫義人氏の講演「プログラマを一生の仕事にできるビジネスモデルで目指す未来のビジョン」が素敵なのでご紹介します。

プログラマを一生の仕事にできるビジネスモデルで目指す未来のビジョン

解説記事