Sử dụng Stripe trong thanh toán trực tuyến

  1. Giới thiệu

    • Stripe Ruby cung cấp SDK cho việc truy cập thuận tiện vào các Stripe API từ ứng dụng được viết bằng ngôn ngữ Ruby. Nó cũng cấp 1 tập hợp các nguồn được định nghĩa sẵn cho phép khởi tạo các requestresponses ho các API
    • Các chức năng khác ràng buộc. Ví dụ
      • Dễ dàng configuration và sử dụng
      • Sử dụng pagination ....
  2. Cài đặt

    • Yêu cầu:

      • Ruby 1.9.3 hoặc cao hơn.
      • rest-client
    • Cách 1

                  gem install stripe
      
      • Nếu bạn muốn xây dựng gem từ nguồn
                  gem build stripe.gemspec
      
    • Cách 2 sử dụng bundle, thêm gem "stripe" vào Gemfile

                  gem "stripe"
      
  3. Sử dụng

    • Tạo stripe client

                  Stripe.api_key = ENV["STRIPE_SECRET_KEY"]
      
    • HTTP status code

    Http Code Descriptions
    200 - OK Everything worked as expected.
    400 - Bad Request Yêu cầu là không được chấp nhận, thường là do thiếu thông số cần thiết.
    401 - Unauthorized Lỗi xác thực
    402 - Request Failed Các thông số này có giá trị nhưng yêu cầu không thành.
    404 - Not Found Không có api đã request
    409 - Conflict Yêu cầu bị xung đột với yêu cầu khác
    429 - Too Many Requests Có quá nhiều request tới API cùng lúc
    500, 502, 503, 504 - Server Errors Có lỗi với server
    • Errors
    Errors Code Descriptions
    api_connection_error Lỗi khi connect ới stripe's API
    api_error Lỗi API bao gồm bất kỳ loại vấn đề
    authentication_error Lỗi xác thực khi gửi request
    card_error Lỗi thẻ khi người dùng nhập 1 thẻ lỗi
    invalid_request_error Lỗi yêu cầu không hợp lệ phát sinh khi yêu cầu của bạn có các tham số không hợp lệ.
    rate_limit_error Quá nhiều yêu cầu nhấn API quá nhanh.
    • CODES
    Code Descriptions
    invalid_number Số thẻ không phải là một số thẻ tín dụng hợp lệ.
    invalid_expiry_month Tháng hết hạn của thẻ là không hợp lệ.
    invalid_expiry_year Năm hết hạn của thẻ không hợp lệ
    invalid_cvc Mã bảo mật của thẻ là không hợp lệ.
    invalid_swipe_data Các dữ liệu thẻ swipe là không hợp lệ.
    incorrect_number Số thẻ không chính xác
    expired_card Thẻ đã hết hạn
    incorrect_cvc Mã bảo mật không chính xác
    incorrect_zip Mã Zip không chính xác
    card_declined Thẻ bị từ chối
    missing Không có thẻ trên một khách hàng mà đang được thanh toán.
    processing_error Có lỗi xảy ra trong khi xử lý thẻ.
    • Handling errors

              begin
              .......................
              rescue Stripe::CardError => e
                if e.json_body[:error][:type] == "card_error"
                  errors.add :base, I18n.t(e.json_body[:error][:code], scope: "stripe.status_code.card_error")
                end
                return false
              rescue Stripe::RateLimitError => e
                errors.add :base, I18n.t("stripe.status_code.unknown_error")
                Rails.logger.error "Too many requests made to the API too quickly"
                StripeMailer.delay.send_error e.json_body[:error][:message]
                return false
              rescue Stripe::InvalidRequestError => e
                errors.add :base, I18n.t("stripe.status_code.unknown_error")
                Rails.logger.error "Invalid parameters were supplied to Stripe's API"
                StripeMailer.delay.send_error e.json_body[:error][:message]
                return false
              rescue Stripe::AuthenticationError => e
                errors.add :base, I18n.t("stripe.status_code.unknown_error")
                Rails.logger.error "Authentication with Stripe's API failed"
                StripeMailer.delay.send_error e.json_body[:error][:message]
                return false
              rescue Stripe::APIConnectionError => e
                errors.add :base, I18n.t("stripe.status_code.unknown_error")
                Rails.logger.error "Network communication with Stripe failed"
                StripeMailer.delay.send_error e.json_body[:error][:message]
                return false
              rescue Stripe::StripeError => e
                errors.add :base, I18n.t("stripe.status_code.unknown_error")
                Rails.logger.error "Display a very generic error to the user"
                StripeMailer.delay.send_error e.json_body[:error][:message]
                return false
              rescue => e
                errors.add :base, I18n.t("stripe.status_code.unknown_error")
                Rails.logger.error "Something else happened, completely unrelated to Stripe"
                return false
              end
      
    • Create CardToken

            response = Stripe::Token.create(
              card:{
                number: card_number,
                exp_month: card_exp_month,
                exp_year: card_exp_year,
                cvc: card_cvc,
                name: card_name
              }
            )
      

    - Response ```JSON #<Stripe::Token id=tok_189fl82eZvKYlo2CYPt0jHMX 0x00000a> JSON: { "id": "tok_189fl82eZvKYlo2CYPt0jHMX", "object": "token", "card": { "id": "card_189fl82eZvKYlo2C0EiJscSI", "object": "card", "address_city": null, "address_country": null, "address_line1": null, "address_line1_check": null, "address_line2": null, "address_state": null, "address_zip": null, "address_zip_check": null, "brand": "Visa", "country": "US", "cvc_check": null, "dynamic_last4": null, "exp_month": 8, "exp_year": 2017, "funding": "credit", "last4": "4242", "metadata": { }, "name": null, "tokenization_method": null }, "client_ip": null, "created": 1462905546, "livemode": false, "type": "card", "used": false } ```