12/08/2018, 14:31

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

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 request và responses ho các API Các chức năng khác ràng buộc. Ví dụ Dễ dàng configuration ...

  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 request và responses 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 } ```
0