{"id":25398,"date":"2016-10-13T11:10:10","date_gmt":"2016-10-13T11:10:10","guid":{"rendered":"https:\/\/dev.railscarma.com\/ways-handling-paypal-refunds-rails\/"},"modified":"2022-09-06T08:28:15","modified_gmt":"2022-09-06T08:28:15","slug":"ways-handling-paypal-refunds-rails","status":"publish","type":"post","link":"https:\/\/www.railscarma.com\/ja\/%e3%83%96%e3%83%ad%e3%82%b0\/%e6%8a%80%e8%a1%93%e8%ab%96%e6%96%87\/ways-handling-paypal-refunds-rails\/","title":{"rendered":"Rails \u3067 PayPal \u306e\u8fd4\u91d1\u3092\u51e6\u7406\u3059\u308b\u65b9\u6cd5"},"content":{"rendered":"<div data-elementor-type=\"wp-post\" data-elementor-id=\"25398\" class=\"elementor elementor-25398\" data-elementor-post-type=\"post\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-26698b39 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"26698b39\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-649f7882\" data-id=\"649f7882\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-51675260 elementor-widget elementor-widget-text-editor\" data-id=\"51675260\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>PayPal Checkout includes payment solutions ranging from simple to robust that let the merchants as well as developers choose an integration option that can be the best-suited for their website and customers.<br><strong style=\"font-size: 16px; color: var( --e-global-color-text );\"><br>In order to integrate Paypal Payment Gateway, we need to do the following:<\/strong><br><\/p>\n<p>\n<strong>1<\/strong>. Have a PayPal business or Premier account.<br><strong>2.<\/strong> Create a PayPal app and get an access token. When we create a PayPal app, PayPal generates a set of OAuth client_id and secret keys for the application. PayPal generates these keys for both the PayPal sandbox and Live environments. To get an access token, pass the client-id:secret credentials in the Authorization header. We use the access token for authentication when we make REST API requests.<br><strong>3.<\/strong> To perform an end-to-end test of our Express Checkout with In-Context integration, create both merchant and buyer accounts in the <strong>PayPal sandbox<\/strong> environment.<br><a href=\"https:\/\/www.sandbox.paypal.com\/in\/webapps\/mpp\/home\" target=\"_blank\">https:\/\/www.sandbox.paypal.com\/in\/webapps\/mpp\/home<\/a><br><strong>Merchant :<\/strong> Select the Business account type and enter an email address and password.<br><strong>Buyer :<\/strong> Select the Personal account type and enter a high PayPal balance, such as 5000.<\/p>\n<p>Once we create Paypal sandbox account then click on the &#8220;Profile&#8221; link for that account, look under the tab &#8220;API Credentials&#8221;. We will have the following information;<\/p>\n<ul style=\"font-family: \" montserrat\",sans-serif;\"=\"\">\n<li><strong>Paypal API Username<\/strong><\/li>\n<li><strong>Paypal API Signature<\/strong><\/li>\n<li><strong>Paypal API Password<\/strong><\/li>\n<\/ul>\n<p>Note: When we are ready to go live we would just use the credentials from our real paypal account instead of the ones from our sandbox account. The credentials can be found in the &#8220;My Profile&#8221; area under the left hand tab &#8220;My Selling Tools&#8221; under the option &#8220;API access&#8221;<\/p>\n<p><strong>How to handle Paypal refunds in Rails:<\/strong><\/p>\n<p><strong>Method 1:<\/strong><\/p>\n<p><strong>Paypal Rest API;<\/strong><\/p>\n<p>For more complex merchant sites, direct calls to PayPal APIs for an Express Checkout integration may be a more appropriate integration.<br><strong>REST API<\/strong> \u2014 We can develop an Express Checkout integration using PayPal REST APIs.<\/p>\n<p>To integrate the Express Checkout with In-Context flow;<br>https:\/\/developer.paypal.com\/docs\/api\/<br>\u307e\u305f\u306f<br><strong>PayPal REST API Ruby SDK<\/strong> (paypal-sdk-rest gem):<br>The PayPal REST SDK provides Ruby APIs to create, process and manage payment.<\/p>\n<p><strong>\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb:<\/strong><br>Add the gem our application, in Gemfile:<\/p>\n<pre><code>gem 'paypal-sdk-rest'<\/code><\/pre>\n<p><strong>And then execute:<\/strong><\/p>\n<pre><code>$ \u30d0\u30f3\u30c9\u30eb\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/code><\/pre>\n<p><strong>\u69cb\u6210\uff1a<\/strong><\/p>\n<pre><code>rails g paypal:sdk:install<\/code><\/pre>\n<p><strong>Refunds a transaction:<\/strong><br>Any transaction we can issue a refund (Both direct and captured payments):<\/p>\n<ul style=\"font-family: \" montserrat\",sans-serif;\"=\"\">\n<li>Refund a completed direct payment (sale)<\/li>\n<li>Refund an authorized and captured payment (capture)<\/li>\n<\/ul>\n<p><strong>Refund a completed payment (sale):<\/strong><br>If we must refund a completed payment, or sale, provide the sale id given to us in response to a completed payment along with an empty JSON payload for a full refund and for partial refunds, we can instead include an amount object in the JSON payload.<\/p>\n<pre><code>curl -v https:\/\/api.sandbox.paypal.com\/v1\/payments\/sale\/CARMAXYZC6136044L\/refund \n-H \"Content-Type:application\/json\" \n-H \"Authorization: Bearer Access-Token\" \n-d '{}'\n<\/code><\/pre>\n<p>Note: We should substitute all call-specific parameters, such as tokens and IDs, with our own.<br><strong>Response state of the refund:<\/strong><\/p>\n<ul style=\"font-family: \" montserrat\",sans-serif;\"=\"\">\n<li><strong>pending-<\/strong> The refund is pending.<\/li>\n<li><strong>completed-<\/strong> The refund has successfully completed.<\/li>\n<li><strong>failed-<\/strong> The refund failed.<\/li>\n<\/ul>\n<p><strong>Refund a captured payment;<\/strong><br>We can also refund a captured payment:<\/p>\n<pre><code>API: https:\/\/api.paypal.com\/v1\/payments\/capture\/{capture_id}\/refund<\/code><\/pre>\n<p>&nbsp;<\/p>\n<p>Note: We must provide an amount object for both full and partial refunds.<\/p>\n<pre><code>curl -v https:\/\/api.sandbox.paypal.com\/v1\/payments\/capture\/CARMAXYZC6136044L\/refund \n-H \"Content-Type:application\/json\" \n-H \"Authorization: Bearer Access-Token\" \n-d '{\n\"amount\":\n{\n\"currency\": \"USD\",\n\"total\": \"50.54\"\n},\n\"description\": \"This is the capture refund description.\"\n}'\n<\/code><\/pre>\n<p>\u53c2\u7167\uff1a <a href=\"https:\/\/developer.paypal.com\">https:\/\/developer.paypal.com<\/a><\/p>\n<p><strong>Method 2:<\/strong><\/p>\n<p><strong>Paypal refund by using Active Merchant Gem:<\/strong><\/p><p><b>ActiveMerchant Integration: <\/b><a href=\"http:\/\/railscasts.com\/episodes\/145-integrating-active-merchant\">http:\/\/railscasts.com\/episodes\/145-integrating-active-merchant<\/a><br><\/p>\n<p>In our Application;<\/p>\n<pre><code>config\/environment\/development.rb\n\nconfig.after_initialize do\nActiveMerchant::Billing::Base.mode = :test\n::GATEWAY = ActiveMerchant::Billing::PaypalGateway.new(\n:login =&gt; \"seller_1229899173_biz_api1.xyz.com\",\n:password =&gt; \"FXWU58S7KXFC6HBE\",\n:signature =&gt; \u201cAGjv6SW.mTiKxtkm6L9DcSUCUgePAUDQ3L-kTdszkPG8mRfjaRZDYtSu\"\n)\nend<\/code><\/pre>\n<p><strong>Refunds a transaction:<\/strong><br>Take a look into <strong>paypal_common_api.rb<\/strong> file in Active Merchant Gem;<br><a href=\"https:\/\/github.com\/activemerchant\/active_merchant\/blob\/master\/lib\/active_merchant\/billing\/gateways\/paypal\/paypal_common_api.rb\">https:\/\/github.com\/activemerchant\/active_merchant\/blob\/master\/lib\/active_merchant\/billing\/gateways\/paypal\/paypal_common_api.rb<\/a><\/p>\n<p><strong>1.<\/strong> For a full refund pass nil for the amount:<\/p>\n<pre><code>gateway.refund nil, 'CARMAXYZC6136044L'<\/code><\/pre>\n<p>This will automatically make the :refund_type be &#8220;Full&#8221;.<br><strong>2.<\/strong> For a partial refund just pass the amount as usual:<\/p>\n<pre><code>gateway.refund 100, 'CARMAXYZC6136044L'<\/code><\/pre>\n<pre><code>def refund(money, identification, options = {})\ncommit 'RefundTransaction', build_refund_request(money, identification, options)\nend<\/code><\/pre>\n<p><strong>\u5143\uff1a<\/strong><\/p>\n<pre><code>Gateway.refund(nil,'CARMAXYZC6136044L') =&gt; Full Refund.<\/code><\/pre>\n<pre><code>Gateway.refund(798,'CARMAXYZC6136044L') =&gt; Partial Refund.<\/code><\/pre>\n<p>Reference: http:\/\/www.rubydoc.info\/github\/Shopify\/active_merchant\/ActiveMerchant\/Billing\/PaypalCommonAPI<\/p>\n<p><strong><br>Method 3:<\/strong><\/p>\n<p><strong>Using Braintree Gem;<\/strong><\/p>\n<p><strong>Braintree Integration:<\/strong><\/p>\n<ul style=\"font-family: \" montserrat\",sans-serif;\"=\"\">\n<li>Sign up for a Braintree Sandbox account.<br><a href=\"https:\/\/www.braintreepayments.com\/sandbox\">https:\/\/www.braintreepayments.com\/sandbox<\/a><\/li>\n<li>Follow the tutorials;<br><a href=\"https:\/\/developers.braintreepayments.com\/start\/hello-server\/ruby\">https:\/\/developers.braintreepayments.com\/start\/hello-server\/ruby<\/a><\/li>\n<li>Configure the environment and API credentials:\n<pre><code>Braintree::Configuration.environment = :sandbox\nBraintree::Configuration.merchant_id = \"use_your_merchant_id\"\nBraintree::Configuration.public_key = \"use_your_public_key\"\nBraintree::Configuration.private_key = \"use_your_private_key\"<\/code><\/pre>\n<\/li>\n<li>Complete the integration and sandbox testing.<\/li>\n<\/ul>\n<p><strong>Requirements:<\/strong><\/p>\n<ul style=\"font-family: \" montserrat\",sans-serif;\"=\"\">\n<li>Transaction status must be settled or settling.<\/li>\n<li>Refund amount cannot be greater than remaining non-refunded amount of the original transaction.<\/li>\n<li>Transaction cannot be refunded again after being completely refunded.<\/li>\n<\/ul>\n<p><strong>Refunds a transaction:<\/strong><br>To issue a refund with the API, we only need to run a Transaction.refund() API request and only requires a transaction_id to refund. Optionally, we may pass a refund amount if there is a requirement for partial refund, and we can pass an order_id if it is different than the original order ID.<\/p>\n<pre><code>result = Braintree::Transaction.refund(\"the_transaction_id\")<\/code><\/pre>\n<p>Full refund:<\/p>\n<pre><code>result = Braintree::Transaction.refund(\"CARMAXYZC6136044L\", nil)<\/code><\/pre>\n<p>Partial refund:<\/p>\n<pre><code>result = Braintree::Transaction.refund(\"CARMAXYZC6136044L\", \"40.00\")<\/code><\/pre>\n<p>result.success?<br>#=&gt; true<br>result.transaction.amount.to_f<br>#=&gt; 40.00<\/p>\n<p>Note: Only full refunds are allowed for transactions being held in Escrow (Hold a sub-merchant&#8217;s transaction funds until we make an additional call to release them). A partial refund of an Escrow transaction will throw a validation error.<br><a href=\"https:\/\/developers.braintreepayments.com\/guides\/braintree-marketplace\/create\/ruby#holding-funds-in-escrow\">https:\/\/developers.braintreepayments.com\/guides\/braintree-marketplace\/create\/ruby#holding-funds-in-escrow<\/a><\/p>\n<div><strong>\u30eb\u30d0\u30a4\u30d6\u30fb\u30b7\u30fc\u30b8\u30a7\u30a4<\/strong><\/div>\n<div>\u30b7\u30cb\u30a2 Ruby on Rails \u958b\u767a\u8005<\/div>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-535472ac elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"535472ac\" data-element_type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-4b113cb4\" data-id=\"4b113cb4\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-3deee2bc elementor-widget elementor-widget-heading\" data-id=\"3deee2bc\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">\u6700\u65b0\u306e\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u3092\u8cfc\u8aad\u3059\u308b<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6724a327 elementor-widget elementor-widget-shortcode\" data-id=\"6724a327\" data-element_type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">\t\t\t\t\t<script type=\"text\/javascript\">\n\t\t\t\t\t\tvar gCaptchaSibWidget;\n                        var onloadSibCallbackInvisible = function () {\n\n                            var element = document.getElementsByClassName('sib-default-btn');\n                            var countInvisible = 0;\n                            var indexArray = [];\n                            jQuery('.sib-default-btn').each(function (index, el) {\n                                if ((jQuery(el).attr('id') == \"invisible\")) {\n                                    indexArray[countInvisible] = index;\n                                    countInvisible++\n                                }\n                            });\n\n                            jQuery('.invi-recaptcha').each(function (index, el) {\n                                grecaptcha.render(element[indexArray[index]], {\n                                    'sitekey': jQuery(el).attr('data-sitekey'),\n                                    'callback': sibVerifyCallback,\n                                });\n                            });\n                        };\n\t\t\t\t\t<\/script>\n\t\t\t\t\t                <script src=\"https:\/\/www.google.com\/recaptcha\/api.js?onload=onloadSibCallbackInvisible&render=explicit\" async defer><\/script>\n\t\t\t\t\n\t\t\t<form id=\"sib_signup_form_1\" method=\"post\" class=\"sib_signup_form\" action=\"\">\n\t\t\t\t<div class=\"sib_loader\" style=\"display:none;\"><img\n\t\t\t\t\t\t\tsrc=\"https:\/\/www.railscarma.com\/wp-includes\/images\/spinner.gif\" alt=\"\u30ed\u30fc\u30c0\"><\/div>\n\t\t\t\t<input type=\"hidden\" name=\"sib_form_action\" value=\"subscribe_form_submit\">\n\t\t\t\t<input type=\"hidden\" name=\"sib_form_id\" value=\"1\">\n                <input type=\"hidden\" name=\"sib_form_alert_notice\" value=\"Please fill out this field\">\n                <input type=\"hidden\" name=\"sib_form_invalid_email_notice\" value=\"Your email address is invalid\">\n                <input type=\"hidden\" name=\"sib_security\" value=\"d7f7626ab9\">\n\t\t\t\t<div class=\"sib_signup_box_inside_1\">\n\t\t\t\t\t<div style=\"\/*display:none*\/\" class=\"sib_msg_disp\">\n\t\t\t\t\t<\/div>\n                                            <div id=\"sib_captcha_invisible\" class=\"invi-recaptcha\" data-sitekey=\"6LdikOAaAAAAAJ6SWrrKVQrtw7TQpQAEnv0HS0G3\"><\/div>\n                    \t\t\t\t\t<p class=\"sib-email-area\">\r\n    <label class=\"sib-email-area\"><\/label>\r\n    <input type=\"email\" class=\"sib-email-area\" name=\"email\" required=\"required\" placeholder=\"\u96fb\u5b50\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\">\r\n<\/p>\r\n<p class=\"sib-NAME-area\">\r\n    <label class=\"sib-NAME-area\"><\/label>\r\n    <input type=\"text\" class=\"sib-NAME-area\" name=\"NAME\" placeholder=\"\u540d\u524d\">\r\n<\/p>\r\n<p>\r\n    <input type=\"submit\" id=\"invisible\" class=\"sib-default-btn\" value=\"\u8cfc\u8aad\u3059\u308b\">\r\n<\/p>\t\t\t\t<\/div>\n\t\t\t<input type=\"hidden\" name=\"trp-form-language\" value=\"ja\"\/><\/form>\n\t\t\t<style>\n\t\t\t\tform#sib_signup_form_1 p.sib-alert-message {\n    padding: 6px 12px;\n    margin-bottom: 20px;\n    border: 1px solid transparent;\n    border-radius: 4px;\n    -webkit-box-sizing: border-box;\n    -moz-box-sizing: border-box;\n    box-sizing: border-box;\n}\nform#sib_signup_form_1 p.sib-alert-message-error {\n    background-color: #f2dede;\n    border-color: #ebccd1;\n    color: #a94442;\n}\nform#sib_signup_form_1 p.sib-alert-message-success {\n    background-color: #dff0d8;\n    border-color: #d6e9c6;\n    color: #3c763d;\n}\nform#sib_signup_form_1 p.sib-alert-message-warning {\n    background-color: #fcf8e3;\n    border-color: #faebcc;\n    color: #8a6d3b;\n}\n\t\t\t<\/style>\n\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t  <div class=\"related-post slider\">\r\n        <div class=\"headline\">\u95a2\u9023\u8a18\u4e8b<\/div>\r\n    <div class=\"post-list owl-carousel\">\r\n\r\n            <div class=\"item\">\r\n            <div class=\"thumb post_thumb\">\r\n    <a  title=\"\u30ab\u30df\u30ca\u30ea\u30b8\u30a7\u30e0\" href=\"https:\/\/www.railscarma.com\/ja\/%e3%83%96%e3%83%ad%e3%82%b0\/%e6%8a%80%e8%a1%93%e8%ab%96%e6%96%87\/%e3%82%ab%e3%83%9f%e3%83%8a%e3%83%aa%e3%82%b8%e3%82%a7%e3%83%a0\/?related_post_from=37277\">\r\n\r\n      <img decoding=\"async\" width=\"800\" height=\"300\" src=\"https:\/\/www.railscarma.com\/wp-content\/uploads\/2023\/04\/kaminari-gem.jpg\" class=\"attachment-full size-full wp-post-image\" alt=\"\u30ab\u30df\u30ca\u30ea\u30b8\u30a7\u30e0\" srcset=\"https:\/\/www.railscarma.com\/wp-content\/uploads\/2023\/04\/kaminari-gem.jpg 800w, https:\/\/www.railscarma.com\/wp-content\/uploads\/2023\/04\/kaminari-gem-300x113.jpg 300w, https:\/\/www.railscarma.com\/wp-content\/uploads\/2023\/04\/kaminari-gem-768x288.jpg 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\r\n\r\n    <\/a>\r\n  <\/div>\r\n\r\n  <a class=\"title post_title\"  title=\"\u30ab\u30df\u30ca\u30ea\u30b8\u30a7\u30e0\" href=\"https:\/\/www.railscarma.com\/ja\/%e3%83%96%e3%83%ad%e3%82%b0\/%e6%8a%80%e8%a1%93%e8%ab%96%e6%96%87\/%e3%82%ab%e3%83%9f%e3%83%8a%e3%83%aa%e3%82%b8%e3%82%a7%e3%83%a0\/?related_post_from=37277\">\r\n        \u30ab\u30df\u30ca\u30ea\u30b8\u30a7\u30e0  <\/a>\r\n\r\n        <\/div>\r\n              <div class=\"item\">\r\n            <div class=\"thumb post_thumb\">\r\n    <a  title=\"\u306a\u305c2026\u5e74\u306bRuby on Rails\u958b\u767a\u8005\u3092\u96c7\u3046\u306e\u304b\uff1f\" href=\"https:\/\/www.railscarma.com\/ja\/%e3%83%96%e3%83%ad%e3%82%b0\/%e3%83%ad%e3%83%bc\/why-to-hire-ruby-on-rails-developers\/?related_post_from=30627\">\r\n\r\n      <img decoding=\"async\" width=\"800\" height=\"300\" src=\"https:\/\/www.railscarma.com\/wp-content\/uploads\/2019\/01\/why-to-hire-ruby-on-rails-developers-in-2022.jpg\" class=\"attachment-full size-full wp-post-image\" alt=\"2022 \u5e74\u306b Ruby on Rails \u958b\u767a\u8005\u3092\u96c7\u7528\u3059\u308b\u7406\u7531\" srcset=\"https:\/\/www.railscarma.com\/wp-content\/uploads\/2019\/01\/why-to-hire-ruby-on-rails-developers-in-2022.jpg 800w, https:\/\/www.railscarma.com\/wp-content\/uploads\/2019\/01\/why-to-hire-ruby-on-rails-developers-in-2022-300x113.jpg 300w, https:\/\/www.railscarma.com\/wp-content\/uploads\/2019\/01\/why-to-hire-ruby-on-rails-developers-in-2022-768x288.jpg 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\r\n\r\n    <\/a>\r\n  <\/div>\r\n\r\n  <a class=\"title post_title\"  title=\"\u306a\u305c2026\u5e74\u306bRuby on Rails\u958b\u767a\u8005\u3092\u96c7\u3046\u306e\u304b\uff1f\" href=\"https:\/\/www.railscarma.com\/ja\/%e3%83%96%e3%83%ad%e3%82%b0\/%e3%83%ad%e3%83%bc\/why-to-hire-ruby-on-rails-developers\/?related_post_from=30627\">\r\n        \u306a\u305c2026\u5e74\u306bRuby on Rails\u958b\u767a\u8005\u3092\u96c7\u3046\u306e\u304b\uff1f  <\/a>\r\n\r\n        <\/div>\r\n              <div class=\"item\">\r\n            <div class=\"thumb post_thumb\">\r\n    <a  title=\"\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba \u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u958b\u767a\u306b\u304a\u3051\u308b\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2 \u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u306e\u91cd\u8981\u6027\" href=\"https:\/\/www.railscarma.com\/ja\/%e3%83%96%e3%83%ad%e3%82%b0\/%e3%83%ad%e3%83%bc\/%e3%82%a8%e3%83%b3%e3%82%bf%e3%83%bc%e3%83%97%e3%83%a9%e3%82%a4%e3%82%ba%e3%83%bb%e3%82%bd%e3%83%95%e3%83%88%e3%82%a6%e3%82%a7%e3%82%a2%e9%96%8b%e7%99%ba%e3%81%ab%e3%81%8a%e3%81%91%e3%82%8b%e3%82%bd\/?related_post_from=36250\">\r\n\r\n      <img decoding=\"async\" width=\"800\" height=\"300\" src=\"https:\/\/www.railscarma.com\/wp-content\/uploads\/2022\/06\/Importance-of-Software-Architecture-in-enterprise-software-development.jpg\" class=\"attachment-full size-full wp-post-image\" alt=\"\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba \u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u958b\u767a\u306b\u304a\u3051\u308b\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2 \u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u306e\u91cd\u8981\u6027\" srcset=\"https:\/\/www.railscarma.com\/wp-content\/uploads\/2022\/06\/Importance-of-Software-Architecture-in-enterprise-software-development.jpg 800w, https:\/\/www.railscarma.com\/wp-content\/uploads\/2022\/06\/Importance-of-Software-Architecture-in-enterprise-software-development-300x113.jpg 300w, https:\/\/www.railscarma.com\/wp-content\/uploads\/2022\/06\/Importance-of-Software-Architecture-in-enterprise-software-development-768x288.jpg 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\r\n\r\n    <\/a>\r\n  <\/div>\r\n\r\n  <a class=\"title post_title\"  title=\"\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba \u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u958b\u767a\u306b\u304a\u3051\u308b\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2 \u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u306e\u91cd\u8981\u6027\" href=\"https:\/\/www.railscarma.com\/ja\/%e3%83%96%e3%83%ad%e3%82%b0\/%e3%83%ad%e3%83%bc\/%e3%82%a8%e3%83%b3%e3%82%bf%e3%83%bc%e3%83%97%e3%83%a9%e3%82%a4%e3%82%ba%e3%83%bb%e3%82%bd%e3%83%95%e3%83%88%e3%82%a6%e3%82%a7%e3%82%a2%e9%96%8b%e7%99%ba%e3%81%ab%e3%81%8a%e3%81%91%e3%82%8b%e3%82%bd\/?related_post_from=36250\">\r\n        \u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba \u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u958b\u767a\u306b\u304a\u3051\u308b\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2 \u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u306e\u91cd\u8981\u6027  <\/a>\r\n\r\n        <\/div>\r\n              <div class=\"item\">\r\n            <div class=\"thumb post_thumb\">\r\n    <a  title=\"Ruby IDE: Ruby on Rails \u958b\u767a\u306b\u6700\u9069\u306a IDE\" href=\"https:\/\/www.railscarma.com\/ja\/%e3%83%96%e3%83%ad%e3%82%b0\/%e3%83%ad%e3%83%bc\/ruby-ide-ruby-on-rails-%e9%96%8b%e7%99%ba%e3%81%ab%e6%9c%80%e9%81%a9%e3%81%aa%e3%82%a2%e3%82%a4%e3%83%87%e3%82%a2\/?related_post_from=36125\">\r\n\r\n      <img decoding=\"async\" width=\"800\" height=\"300\" src=\"https:\/\/www.railscarma.com\/wp-content\/uploads\/2022\/01\/BEST-IDES-FOR-RUBY-ON-RAILS-DEVELOPMENT.jpg\" class=\"attachment-full size-full wp-post-image\" alt=\"Ruby on Rails \u958b\u767a\u306b\u6700\u9069\u306a\u30a2\u30a4\u30c7\u30a2\" srcset=\"https:\/\/www.railscarma.com\/wp-content\/uploads\/2022\/01\/BEST-IDES-FOR-RUBY-ON-RAILS-DEVELOPMENT.jpg 800w, https:\/\/www.railscarma.com\/wp-content\/uploads\/2022\/01\/BEST-IDES-FOR-RUBY-ON-RAILS-DEVELOPMENT-300x113.jpg 300w, https:\/\/www.railscarma.com\/wp-content\/uploads\/2022\/01\/BEST-IDES-FOR-RUBY-ON-RAILS-DEVELOPMENT-768x288.jpg 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\r\n\r\n    <\/a>\r\n  <\/div>\r\n\r\n  <a class=\"title post_title\"  title=\"Ruby IDE: Ruby on Rails \u958b\u767a\u306b\u6700\u9069\u306a IDE\" href=\"https:\/\/www.railscarma.com\/ja\/%e3%83%96%e3%83%ad%e3%82%b0\/%e3%83%ad%e3%83%bc\/ruby-ide-ruby-on-rails-%e9%96%8b%e7%99%ba%e3%81%ab%e6%9c%80%e9%81%a9%e3%81%aa%e3%82%a2%e3%82%a4%e3%83%87%e3%82%a2\/?related_post_from=36125\">\r\n        Ruby IDE: Ruby on Rails \u958b\u767a\u306b\u6700\u9069\u306a IDE  <\/a>\r\n\r\n        <\/div>\r\n      \r\n  <\/div>\r\n\r\n  <script>\r\n      <\/script>\r\n  <style>\r\n    .related-post {}\r\n\r\n    .related-post .post-list {\r\n      text-align: left;\r\n          }\r\n\r\n    .related-post .post-list .item {\r\n      margin: 10px;\r\n      padding: 10px;\r\n          }\r\n\r\n    .related-post .headline {\r\n      font-size: 14px !important;\r\n      color: #999999 !important;\r\n          }\r\n\r\n    .related-post .post-list .item .post_thumb {\r\n      max-height: 220px;\r\n      margin: 10px 0px;\r\n      padding: 0px;\r\n      display: block;\r\n          }\r\n\r\n    .related-post .post-list .item .post_title {\r\n      font-size: 14px;\r\n      color: #000000;\r\n      margin: 10px 0px;\r\n      padding: 0px;\r\n      display: block;\r\n      text-decoration: none;\r\n          }\r\n\r\n    .related-post .post-list .item .post_excerpt {\r\n      font-size: 12px;\r\n      color: #3f3f3f;\r\n      margin: 10px 0px;\r\n      padding: 0px;\r\n      display: block;\r\n      text-decoration: none;\r\n          }\r\n\r\n    .related-post .owl-dots .owl-dot {\r\n          }\r\n\r\n      <\/style>\r\n      <script>\r\n      jQuery(document).ready(function($) {\r\n        $(\".related-post .post-list\").owlCarousel({\r\n          items: 2,\r\n          responsiveClass: true,\r\n          responsive: {\r\n            0: {\r\n              items: 1,\r\n            },\r\n            768: {\r\n              items: 2,\r\n            },\r\n            1200: {\r\n              items: 2,\r\n            }\r\n          },\r\n                      rewind: true,\r\n                                loop: true,\r\n                                center: false,\r\n                                autoplay: true,\r\n            autoplayHoverPause: true,\r\n                                nav: true,\r\n            navSpeed: 1000,\r\n            navText: ['<i class=\"fas fa-chevron-left\"><\/i>', '<i class=\"fas fa-chevron-right\"><\/i>'],\r\n                                dots: false,\r\n            dotsSpeed: 1200,\r\n                                                    rtl: false,\r\n          \r\n        });\r\n      });\r\n    <\/script>\r\n  <\/div>","protected":false},"excerpt":{"rendered":"<p>PayPal Checkout \u306b\u306f\u3001\u30b7\u30f3\u30d7\u30eb\u306a\u3082\u306e\u304b\u3089\u5805\u7262\u306a\u3082\u306e\u307e\u3067\u3055\u307e\u3056\u307e\u306a\u652f\u6255\u3044\u30bd\u30ea\u30e5\u30fc\u30b7\u30e7\u30f3\u304c\u542b\u307e\u308c\u3066\u304a\u308a\u3001\u8ca9\u58f2\u8005\u3060\u3051\u3067\u306a\u304f\u958b\u767a\u8005\u3082 Web \u30b5\u30a4\u30c8\u3084\u9867\u5ba2\u306b\u6700\u9069\u306a\u7d71\u5408\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u9078\u629e\u3067\u304d\u307e\u3059\u3002Paypal \u30da\u30a4\u30e1\u30f3\u30c8 \u30b2\u30fc\u30c8\u30a6\u30a7\u30a4\u3092\u7d71\u5408\u3059\u308b\u306b\u306f\u3001\u6b21\u306e\u3053\u3068\u3092\u884c\u3046\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 1. PayPal \u30d3\u30b8\u30cd\u30b9 \u30a2\u30ab\u30a6\u30f3\u30c8\u307e\u305f\u306f\u30d7\u30ec\u30df\u30a2 \u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u6301\u3063\u3066\u3044\u307e\u3059\u30022. PayPal \u30a2\u30d7\u30ea\u3092\u4f5c\u6210\u3057\u3001\u30a2\u30af\u30bb\u30b9 \u30c8\u30fc\u30af\u30f3\u3092\u53d6\u5f97\u3057\u307e\u3059\u3002 PayPal \u30a2\u30d7\u30ea\u3092\u4f5c\u6210\u3059\u308b\u3068\u3001PayPal \u306f\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e OAuth client_id \u3068\u79d8\u5bc6\u30ad\u30fc\u306e\u30bb\u30c3\u30c8\u3092\u751f\u6210\u3057\u307e\u3059\u3002 PayPal \u306f\u3001PayPal \u30b5\u30f3\u30c9\u30dc\u30c3\u30af\u30b9\u74b0\u5883\u3068\u30e9\u30a4\u30d6\u74b0\u5883\u306e\u4e21\u65b9\u306b\u5bfe\u3057\u3066\u3053\u308c\u3089\u306e\u30ad\u30fc\u3092\u751f\u6210\u3057\u307e\u3059\u3002\u30a2\u30af\u30bb\u30b9 \u30c8\u30fc\u30af\u30f3\u3092\u53d6\u5f97\u3059\u308b\u306b\u306f\u3001Authorization \u30d8\u30c3\u30c0\u30fc\u3067 client-id:secret \u8cc7\u683c\u60c5\u5831\u3092\u6e21\u3057\u307e\u3059\u3002\u30a2\u30af\u30bb\u30b9\u30c8\u30fc\u30af\u30f3\u3092\u4f7f\u7528\u3057\u307e\u3059\u2026<\/p>\n<p class=\"read-more\"> <a class=\"\" href=\"https:\/\/www.railscarma.com\/ja\/%e3%83%96%e3%83%ad%e3%82%b0\/ruby-regex-match-guide-with-examples\/\"> <span class=\"screen-reader-text\">Ruby\u6b63\u898f\u8868\u73fe\u30de\u30c3\u30c1\u30ac\u30a4\u30c9\uff082026\uff09\u4f8b\u4ed8\u304d<\/span> \u3082\u3063\u3068\u8aad\u3080 \"<\/a><\/p>","protected":false},"author":1,"featured_media":31850,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[384],"tags":[],"class_list":["post-25398","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-technical-articles"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Ways of Handling PayPal Refunds in Rails | Rails Application Development<\/title>\n<meta name=\"description\" content=\"PayPal Checkout includes payment solutions ranging from simple to robust that\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.railscarma.com\/ja\/\u30d6\u30ed\u30b0\/\u6280\u8853\u8ad6\u6587\/ways-handling-paypal-refunds-rails\/\" \/>\n<meta property=\"og:locale\" content=\"ja_JP\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Ways of Handling PayPal Refunds in Rails | Rails Application Development\" \/>\n<meta property=\"og:description\" content=\"PayPal Checkout includes payment solutions ranging from simple to robust that\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.railscarma.com\/ja\/\u30d6\u30ed\u30b0\/\u6280\u8853\u8ad6\u6587\/ways-handling-paypal-refunds-rails\/\" \/>\n<meta property=\"og:site_name\" content=\"RailsCarma - Ruby on Rails Development Company specializing in Offshore Development\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/RailsCarma\/\" \/>\n<meta property=\"article:published_time\" content=\"2016-10-13T11:10:10+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-09-06T08:28:15+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.railscarma.com\/wp-content\/uploads\/2016\/10\/Paypal_Refunds.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"800\" \/>\n\t<meta property=\"og:image:height\" content=\"300\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@railscarma\" \/>\n<meta name=\"twitter:site\" content=\"@railscarma\" \/>\n<meta name=\"twitter:label1\" content=\"\u57f7\u7b46\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593\" \/>\n\t<meta name=\"twitter:data2\" content=\"5\u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.railscarma.com\/blog\/technical-articles\/ways-handling-paypal-refunds-rails\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.railscarma.com\/blog\/technical-articles\/ways-handling-paypal-refunds-rails\/\"},\"author\":{\"name\":\"admin\",\"@id\":\"https:\/\/www.railscarma.com\/#\/schema\/person\/5f2228a2dec7549056e709de6eb85d21\"},\"headline\":\"Ways of Handling PayPal Refunds in Rails\",\"datePublished\":\"2016-10-13T11:10:10+00:00\",\"dateModified\":\"2022-09-06T08:28:15+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.railscarma.com\/blog\/technical-articles\/ways-handling-paypal-refunds-rails\/\"},\"wordCount\":806,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.railscarma.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.railscarma.com\/blog\/technical-articles\/ways-handling-paypal-refunds-rails\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.railscarma.com\/wp-content\/uploads\/2016\/10\/Paypal_Refunds.jpg\",\"articleSection\":[\"Technical Articles\"],\"inLanguage\":\"ja\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.railscarma.com\/blog\/technical-articles\/ways-handling-paypal-refunds-rails\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.railscarma.com\/blog\/technical-articles\/ways-handling-paypal-refunds-rails\/\",\"url\":\"https:\/\/www.railscarma.com\/blog\/technical-articles\/ways-handling-paypal-refunds-rails\/\",\"name\":\"Ways of Handling PayPal Refunds in Rails | Rails Application Development\",\"isPartOf\":{\"@id\":\"https:\/\/www.railscarma.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.railscarma.com\/blog\/technical-articles\/ways-handling-paypal-refunds-rails\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.railscarma.com\/blog\/technical-articles\/ways-handling-paypal-refunds-rails\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.railscarma.com\/wp-content\/uploads\/2016\/10\/Paypal_Refunds.jpg\",\"datePublished\":\"2016-10-13T11:10:10+00:00\",\"dateModified\":\"2022-09-06T08:28:15+00:00\",\"description\":\"PayPal Checkout includes payment solutions ranging from simple to robust that\",\"breadcrumb\":{\"@id\":\"https:\/\/www.railscarma.com\/blog\/technical-articles\/ways-handling-paypal-refunds-rails\/#breadcrumb\"},\"inLanguage\":\"ja\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.railscarma.com\/blog\/technical-articles\/ways-handling-paypal-refunds-rails\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\/\/www.railscarma.com\/blog\/technical-articles\/ways-handling-paypal-refunds-rails\/#primaryimage\",\"url\":\"https:\/\/www.railscarma.com\/wp-content\/uploads\/2016\/10\/Paypal_Refunds.jpg\",\"contentUrl\":\"https:\/\/www.railscarma.com\/wp-content\/uploads\/2016\/10\/Paypal_Refunds.jpg\",\"width\":800,\"height\":300},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.railscarma.com\/blog\/technical-articles\/ways-handling-paypal-refunds-rails\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.railscarma.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Ways of Handling PayPal Refunds in Rails\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.railscarma.com\/#website\",\"url\":\"https:\/\/www.railscarma.com\/\",\"name\":\"RailsCarma - Ruby on Rails Development Company specializing in Offshore Development\",\"description\":\"RailsCarma is a Ruby on Rails Development Company in Bangalore. We specialize in Offshore Ruby on Rails Development based out in USA and India. Hire experienced Ruby on Rails developers for the ultimate Web Experience.\",\"publisher\":{\"@id\":\"https:\/\/www.railscarma.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.railscarma.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ja\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.railscarma.com\/#organization\",\"name\":\"RailsCarma\",\"url\":\"https:\/\/www.railscarma.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\/\/www.railscarma.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.railscarma.com\/wp-content\/uploads\/2020\/08\/railscarma_logo.png\",\"contentUrl\":\"https:\/\/www.railscarma.com\/wp-content\/uploads\/2020\/08\/railscarma_logo.png\",\"width\":200,\"height\":46,\"caption\":\"RailsCarma\"},\"image\":{\"@id\":\"https:\/\/www.railscarma.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/RailsCarma\/\",\"https:\/\/x.com\/railscarma\",\"https:\/\/www.linkedin.com\/company\/railscarma\/\",\"https:\/\/myspace.com\/railscarma\",\"https:\/\/in.pinterest.com\/railscarma\/\",\"https:\/\/www.youtube.com\/channel\/UCx3Wil-aAnDARuatTEyMdpg\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.railscarma.com\/#\/schema\/person\/5f2228a2dec7549056e709de6eb85d21\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\/\/www.railscarma.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/308867ca6c81f3aba146080c601000087180326f752c4116849ea9f514c6a4fa?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/308867ca6c81f3aba146080c601000087180326f752c4116849ea9f514c6a4fa?s=96&d=mm&r=g\",\"caption\":\"admin\"},\"sameAs\":[\"https:\/\/www.railscarma.com\/hire-ruby-on-rails-developer\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Ways of Handling PayPal Refunds in Rails | Rails Application Development","description":"PayPal Checkout includes payment solutions ranging from simple to robust that","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.railscarma.com\/ja\/\u30d6\u30ed\u30b0\/\u6280\u8853\u8ad6\u6587\/ways-handling-paypal-refunds-rails\/","og_locale":"ja_JP","og_type":"article","og_title":"Ways of Handling PayPal Refunds in Rails | Rails Application Development","og_description":"PayPal Checkout includes payment solutions ranging from simple to robust that","og_url":"https:\/\/www.railscarma.com\/ja\/\u30d6\u30ed\u30b0\/\u6280\u8853\u8ad6\u6587\/ways-handling-paypal-refunds-rails\/","og_site_name":"RailsCarma - Ruby on Rails Development Company specializing in Offshore Development","article_publisher":"https:\/\/www.facebook.com\/RailsCarma\/","article_published_time":"2016-10-13T11:10:10+00:00","article_modified_time":"2022-09-06T08:28:15+00:00","og_image":[{"width":800,"height":300,"url":"https:\/\/www.railscarma.com\/wp-content\/uploads\/2016\/10\/Paypal_Refunds.jpg","type":"image\/jpeg"}],"author":"admin","twitter_card":"summary_large_image","twitter_creator":"@railscarma","twitter_site":"@railscarma","twitter_misc":{"\u57f7\u7b46\u8005":"admin","\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593":"5\u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.railscarma.com\/blog\/technical-articles\/ways-handling-paypal-refunds-rails\/#article","isPartOf":{"@id":"https:\/\/www.railscarma.com\/blog\/technical-articles\/ways-handling-paypal-refunds-rails\/"},"author":{"name":"admin","@id":"https:\/\/www.railscarma.com\/#\/schema\/person\/5f2228a2dec7549056e709de6eb85d21"},"headline":"Ways of Handling PayPal Refunds in Rails","datePublished":"2016-10-13T11:10:10+00:00","dateModified":"2022-09-06T08:28:15+00:00","mainEntityOfPage":{"@id":"https:\/\/www.railscarma.com\/blog\/technical-articles\/ways-handling-paypal-refunds-rails\/"},"wordCount":806,"commentCount":0,"publisher":{"@id":"https:\/\/www.railscarma.com\/#organization"},"image":{"@id":"https:\/\/www.railscarma.com\/blog\/technical-articles\/ways-handling-paypal-refunds-rails\/#primaryimage"},"thumbnailUrl":"https:\/\/www.railscarma.com\/wp-content\/uploads\/2016\/10\/Paypal_Refunds.jpg","articleSection":["Technical Articles"],"inLanguage":"ja","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.railscarma.com\/blog\/technical-articles\/ways-handling-paypal-refunds-rails\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.railscarma.com\/blog\/technical-articles\/ways-handling-paypal-refunds-rails\/","url":"https:\/\/www.railscarma.com\/blog\/technical-articles\/ways-handling-paypal-refunds-rails\/","name":"Ways of Handling PayPal Refunds in Rails | Rails Application Development","isPartOf":{"@id":"https:\/\/www.railscarma.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.railscarma.com\/blog\/technical-articles\/ways-handling-paypal-refunds-rails\/#primaryimage"},"image":{"@id":"https:\/\/www.railscarma.com\/blog\/technical-articles\/ways-handling-paypal-refunds-rails\/#primaryimage"},"thumbnailUrl":"https:\/\/www.railscarma.com\/wp-content\/uploads\/2016\/10\/Paypal_Refunds.jpg","datePublished":"2016-10-13T11:10:10+00:00","dateModified":"2022-09-06T08:28:15+00:00","description":"PayPal Checkout includes payment solutions ranging from simple to robust that","breadcrumb":{"@id":"https:\/\/www.railscarma.com\/blog\/technical-articles\/ways-handling-paypal-refunds-rails\/#breadcrumb"},"inLanguage":"ja","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.railscarma.com\/blog\/technical-articles\/ways-handling-paypal-refunds-rails\/"]}]},{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/www.railscarma.com\/blog\/technical-articles\/ways-handling-paypal-refunds-rails\/#primaryimage","url":"https:\/\/www.railscarma.com\/wp-content\/uploads\/2016\/10\/Paypal_Refunds.jpg","contentUrl":"https:\/\/www.railscarma.com\/wp-content\/uploads\/2016\/10\/Paypal_Refunds.jpg","width":800,"height":300},{"@type":"BreadcrumbList","@id":"https:\/\/www.railscarma.com\/blog\/technical-articles\/ways-handling-paypal-refunds-rails\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.railscarma.com\/"},{"@type":"ListItem","position":2,"name":"Ways of Handling PayPal Refunds in Rails"}]},{"@type":"WebSite","@id":"https:\/\/www.railscarma.com\/#website","url":"https:\/\/www.railscarma.com\/","name":"RailsCarma - \u30aa\u30d5\u30b7\u30e7\u30a2\u958b\u767a\u306b\u7279\u5316\u3057\u305f Ruby on Rails \u958b\u767a\u4f1a\u793e","description":"RailsCarma \u306f\u30d0\u30f3\u30ac\u30ed\u30fc\u30eb\u306e Ruby on Rails \u958b\u767a\u4f1a\u793e\u3067\u3059\u3002\u5f53\u793e\u306f\u7c73\u56fd\u3068\u30a4\u30f3\u30c9\u3092\u62e0\u70b9\u3068\u3059\u308b\u30aa\u30d5\u30b7\u30e7\u30a2 Ruby on Rails \u958b\u767a\u3092\u5c02\u9580\u3068\u3057\u3066\u3044\u307e\u3059\u3002\u7d4c\u9a13\u8c4a\u5bcc\u306a Ruby on Rails \u958b\u767a\u8005\u3092\u96c7\u3063\u3066\u3001\u7a76\u6975\u306e Web \u30a8\u30af\u30b9\u30da\u30ea\u30a8\u30f3\u30b9\u3092\u5b9f\u73fe\u3057\u307e\u3057\u3087\u3046\u3002","publisher":{"@id":"https:\/\/www.railscarma.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.railscarma.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ja"},{"@type":"Organization","@id":"https:\/\/www.railscarma.com\/#organization","name":"\u30ec\u30fc\u30eb\u30ab\u30fc\u30de","url":"https:\/\/www.railscarma.com\/","logo":{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/www.railscarma.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.railscarma.com\/wp-content\/uploads\/2020\/08\/railscarma_logo.png","contentUrl":"https:\/\/www.railscarma.com\/wp-content\/uploads\/2020\/08\/railscarma_logo.png","width":200,"height":46,"caption":"RailsCarma"},"image":{"@id":"https:\/\/www.railscarma.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/RailsCarma\/","https:\/\/x.com\/railscarma","https:\/\/www.linkedin.com\/company\/railscarma\/","https:\/\/myspace.com\/railscarma","https:\/\/in.pinterest.com\/railscarma\/","https:\/\/www.youtube.com\/channel\/UCx3Wil-aAnDARuatTEyMdpg"]},{"@type":"Person","@id":"https:\/\/www.railscarma.com\/#\/schema\/person\/5f2228a2dec7549056e709de6eb85d21","name":"\u7ba1\u7406\u8005","image":{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/www.railscarma.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/308867ca6c81f3aba146080c601000087180326f752c4116849ea9f514c6a4fa?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/308867ca6c81f3aba146080c601000087180326f752c4116849ea9f514c6a4fa?s=96&d=mm&r=g","caption":"admin"},"sameAs":["https:\/\/www.railscarma.com\/hire-ruby-on-rails-developer\/"]}]}},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.railscarma.com\/ja\/wp-json\/wp\/v2\/posts\/25398","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.railscarma.com\/ja\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.railscarma.com\/ja\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.railscarma.com\/ja\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.railscarma.com\/ja\/wp-json\/wp\/v2\/comments?post=25398"}],"version-history":[{"count":0,"href":"https:\/\/www.railscarma.com\/ja\/wp-json\/wp\/v2\/posts\/25398\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.railscarma.com\/ja\/wp-json\/wp\/v2\/media\/31850"}],"wp:attachment":[{"href":"https:\/\/www.railscarma.com\/ja\/wp-json\/wp\/v2\/media?parent=25398"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.railscarma.com\/ja\/wp-json\/wp\/v2\/categories?post=25398"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.railscarma.com\/ja\/wp-json\/wp\/v2\/tags?post=25398"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}