{"id":200,"date":"2010-01-13T11:05:05","date_gmt":"2010-01-13T15:05:05","guid":{"rendered":"http:\/\/www.johnconde.net\/blog\/?p=200"},"modified":"2023-01-08T12:11:39","modified_gmt":"2023-01-08T16:11:39","slug":"all-about-authorize-nets-silent-post","status":"publish","type":"post","link":"https:\/\/website-0f9bf4a4.hpx.ppi.temporary.site\/blog\/all-about-authorize-nets-silent-post\/","title":{"rendered":"All About Authorize.Net&#8217;s Silent Post"},"content":{"rendered":"<p>\n    One very common topic at the <a href=\"http:\/\/community.developer.authorize.net\/\" rel=\"external\">Authorize.Net developer forums<\/a> is their Silent Post feature and how it works. In fact, how it works seems to be the most common question by far. For better or worse, Authorize.Net&#8217;s documentation seems to be limited concerning silent post so I decided to make this blog post summarizing the information that has been shared in the community concerning this feature.\n<\/p>\n<p>\n    When a transaction is completed (via <acronym title=\"Simple Integration Method\">SIM<\/acronym>, <acronym title=\"Advanced Integration Method\">AIM<\/acronym>, <acronym title=\"Automated Recurring Billing\">ARB<\/acronym>, or <acronym title=\"Customer Information Manager\">CIM<\/acronym>), Authorize.Net&#8217;s servers will literally POST the details of the transaction to a URL you specify. In the server-side code for the page that the URL points to, you can read all of the transaction details as if they were fields on a form and <a href=\"https:\/\/sprout24.com\/thrive-leads-vs-bloom-wordpress-opt-comparison\/\">compare thrive leads vs bloom optin forms<\/a>.  The end user never sees any of this, it is all done server-to-server, thus the &#8220;Silent&#8221; part.\n<\/p>\n<p>\n    Silent post will be incurred for successful SIM, AIM, ARB, and CIM transactions (this includes declines) as well as virtual terminal transactions. However, if a credit card on file within an ARB subscription has expired a transaction will not process thus you will not receive a Silent Post response, as you only receive Silent Post responses to transactions that process through your account. In order to be notified about expired credit cards, you can enable the ARB email notifications from within the account control panel.\n<\/p>\n<p>\n    Silent Post responses are returned in real-time, meaning as soon as the transaction processes the Silent Post is sent to your specified URL.\n<\/p>\n<p>\n    To add or edit a Silent Post URL to your production environment account:\n<\/p>\n<ol>\n<li>Login to your Merchant Interface at https:\/\/account.authorize.net<\/li>\n<li>Click Settings in the main left side menu<\/li>\n<li>Click Silent Post URL<\/li>\n<li>In the URL text field, enter the URL to which the payment gateway should copy the transaction relay response. This URL must start with either &#8220;http:\/\/&#8221; or &#8220;https:\/\/&#8221;<\/li>\n<li>Click Submit. A confirmation message indicates that the URL has been added<\/li>\n<\/ol>\n<h3>\n    Processing A Silent Post<br \/>\n<\/h3>\n<p>\n    To receive and process Silent Post data all you really need to know is what fields to expect. Basically it reports the same information as an AIM transaction response but also includes the subscription ID and subscription transaction number for ARB subscriptions and CIM Profile ID for CIM transactions. See the <a href=\"http:\/\/www.authorize.net\/support\/AIM_guide.pdf\" rel=\"external\" class=\"pdf\">AIM integration guide<\/a> for details about the response codes.\n<\/p>\n<h3>\n    Sample Silent Post<br \/>\n<\/h3>\n<p>\n    Below is a dump of the fields and sample data that can be sent from Silent Post:\n<\/p>\n<p><code><br \/>\n    [x_response_code] => 2<br \/>\n    [x_response_subcode] => 1<br \/>\n    [x_response_reason_code] => 2<br \/>\n    [x_response_reason_text] => This transaction has been declined.<br \/>\n    [x_auth_code] =><br \/>\n    [x_avs_code] => P<br \/>\n    [x_trans_id] => 2692521494<br \/>\n    [x_invoice_num] =><br \/>\n    [x_description] =><br \/>\n    [x_amount] => 5.99<br \/>\n    [x_method] => CC<br \/>\n    [x_type] => auth_capture<br \/>\n    [x_cust_id] => 17234<br \/>\n    [x_first_name] => Johnny<br \/>\n    [x_last_name] => Fakeuser<br \/>\n    [x_company] =><br \/>\n    [x_address] =><br \/>\n    [x_city] =><br \/>\n    [x_state] =><br \/>\n    [x_zip] =><br \/>\n    [x_country] =><br \/>\n    [x_phone] =><br \/>\n    [x_fax] =><br \/>\n    [x_email] =><br \/>\n    [x_ship_to_first_name] =><br \/>\n    [x_ship_to_last_name] =><br \/>\n    [x_ship_to_company] =><br \/>\n    [x_ship_to_address] =><br \/>\n    [x_ship_to_city] =><br \/>\n    [x_ship_to_state] =><br \/>\n    [x_ship_to_zip] =><br \/>\n    [x_ship_to_country] =><br \/>\n    [x_tax] => 0.0000<br \/>\n    [x_duty] => 0.0000<br \/>\n    [x_freight] => 0.0000<br \/>\n    [x_tax_exempt] => FALSE<br \/>\n    [x_po_num] =><br \/>\n    [x_MD5_Hash] => 35BB06A9F9349854922A13EE67AE5115<br \/>\n    [x_cavv_response] =><br \/>\n    [x_test_request] => false<br \/>\n    [x_subscription_id] => 4991817<br \/>\n    [x_subscription_paynum] => 2<br \/>\n    [x_cim_profile_id] => 12354<\/p>\n<p>    * x_subscription_paynum starts at 1 for the first payment<br \/>\n<\/code><\/p>\n<h3>\n    Reading The Data<br \/>\n<\/h3>\n<p>\n    If a transaction is approved x_response_code will contain a value of 1.\n<\/p>\n<p>\n    If the card is declined x_response_code will contain a value of 2.\n<\/p>\n<p>\n    If there was an error the card is expired x_response_code will contain a value of 3. Expired credit cards will have this response code and x_response_reason_code will contain a value of 8.\n<\/p>\n<p>\n    If the transaction is held for review x_response_code will contain a value of 4.\n<\/p>\n<h3>\n    Testing A Silent Post Script<br \/>\n<\/h3>\n<p>\n    Testing a Silent Post script is easy to do as it is no different then handling a submitted form. All you need is sample data to work with. The form below submits a sample ARB transaction to a Silent Post processing script (that you will write):\n<\/p>\n<pre lang=\"HTML\">   \r\n<form action=\"http:\/\/www.yourdomain.com\/silent-post.php\" method=\"post\">\r\n    <input type=\"hidden\" name=\"x_response_code\" value=\"1\"\/>\r\n    <input type=\"hidden\" name=\"x_response_subcode\" value=\"1\"\/>\r\n    <input type=\"hidden\" name=\"x_response_reason_code\" value=\"1\"\/>\r\n    <input type=\"hidden\" name=\"x_response_reason_text\" value=\"This \r\n                                                 transaction has been approved.\"\/>\r\n    <input type=\"hidden\" name=\"x_auth_code\" value=\"\"\/>\r\n    <input type=\"hidden\" name=\"x_avs_code\" value=\"P\"\/>\r\n    <input type=\"hidden\" name=\"x_trans_id\" value=\"1821199455\"\/>\r\n    <input type=\"hidden\" name=\"x_invoice_num\" value=\"\"\/>\r\n    <input type=\"hidden\" name=\"x_description\" value=\"\"\/>\r\n    <input type=\"hidden\" name=\"x_amount\" value=\"9.95\"\/>\r\n    <input type=\"hidden\" name=\"x_method\" value=\"CC\"\/>\r\n    <input type=\"hidden\" name=\"x_type\" value=\"auth_capture\"\/>\r\n    <input type=\"hidden\" name=\"x_cust_id\" value=\"1\"\/>\r\n    <input type=\"hidden\" name=\"x_first_name\" value=\"John\"\/>\r\n    <input type=\"hidden\" name=\"x_last_name\" value=\"Smith\"\/>\r\n    <input type=\"hidden\" name=\"x_company\" value=\"\"\/>\r\n    <input type=\"hidden\" name=\"x_address\" value=\"\"\/>\r\n    <input type=\"hidden\" name=\"x_city\" value=\"\"\/>\r\n    <input type=\"hidden\" name=\"x_state\" value=\"\"\/>\r\n    <input type=\"hidden\" name=\"x_zip\" value=\"\"\/>\r\n    <input type=\"hidden\" name=\"x_country\" value=\"\"\/>\r\n    <input type=\"hidden\" name=\"x_phone\" value=\"\"\/>\r\n    <input type=\"hidden\" name=\"x_fax\" value=\"\"\/>\r\n    <input type=\"hidden\" name=\"x_email\" value=\"\"\/>\r\n    <input type=\"hidden\" name=\"x_ship_to_first_name\" value=\"\"\/>\r\n    <input type=\"hidden\" name=\"x_ship_to_last_name\" value=\"\"\/>\r\n    <input type=\"hidden\" name=\"x_ship_to_company\" value=\"\"\/>\r\n    <input type=\"hidden\" name=\"x_ship_to_address\" value=\"\"\/>\r\n    <input type=\"hidden\" name=\"x_ship_to_city\" value=\"\"\/>\r\n    <input type=\"hidden\" name=\"x_ship_to_state\" value=\"\"\/>\r\n    <input type=\"hidden\" name=\"x_ship_to_zip\" value=\"\"\/>\r\n    <input type=\"hidden\" name=\"x_ship_to_country\" value=\"\"\/>\r\n    <input type=\"hidden\" name=\"x_tax\" value=\"0.0000\"\/>\r\n    <input type=\"hidden\" name=\"x_duty\" value=\"0.0000\"\/>\r\n    <input type=\"hidden\" name=\"x_freight\" value=\"0.0000\"\/>\r\n    <input type=\"hidden\" name=\"x_tax_exempt\" value=\"FALSE\"\/>\r\n    <input type=\"hidden\" name=\"x_po_num\" value=\"\"\/>\r\n    <input type=\"hidden\" name=\"x_MD5_Hash\" value=\"A375D35004547A91EE3B7AFA40B1E727\"\/>\r\n    <input type=\"hidden\" name=\"x_cavv_response\" value=\"\"\/>\r\n    <input type=\"hidden\" name=\"x_test_request\" value=\"false\"\/>\r\n    <input type=\"hidden\" name=\"x_subscription_id\" value=\"365314\"\/>\r\n    <input type=\"hidden\" name=\"x_subscription_paynum\" value=\"1\"\/>\r\n    <input type=\"submit\"\/>\r\n<\/form>\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>One very common topic at the Authorize.Net developer forums is their Silent Post feature and how it works. In fact, how it works seems to be the most common question by far. For better or worse, Authorize.Net\u2019s documentation seems to be limited concerning silent post so I decided to make this blog post summarizing the information that has been shared in the community concerning this feature. <a href=\"https:\/\/website-0f9bf4a4.hpx.ppi.temporary.site\/blog\/all-about-authorize-nets-silent-post\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[16],"tags":[60,84],"class_list":["post-200","post","type-post","status-publish","format-standard","hentry","category-programming","tag-authorizenet","tag-silent-post"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/pwpo4-3e","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/website-0f9bf4a4.hpx.ppi.temporary.site\/blog\/wp-json\/wp\/v2\/posts\/200","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/website-0f9bf4a4.hpx.ppi.temporary.site\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/website-0f9bf4a4.hpx.ppi.temporary.site\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/website-0f9bf4a4.hpx.ppi.temporary.site\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/website-0f9bf4a4.hpx.ppi.temporary.site\/blog\/wp-json\/wp\/v2\/comments?post=200"}],"version-history":[{"count":15,"href":"https:\/\/website-0f9bf4a4.hpx.ppi.temporary.site\/blog\/wp-json\/wp\/v2\/posts\/200\/revisions"}],"predecessor-version":[{"id":766,"href":"https:\/\/website-0f9bf4a4.hpx.ppi.temporary.site\/blog\/wp-json\/wp\/v2\/posts\/200\/revisions\/766"}],"wp:attachment":[{"href":"https:\/\/website-0f9bf4a4.hpx.ppi.temporary.site\/blog\/wp-json\/wp\/v2\/media?parent=200"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/website-0f9bf4a4.hpx.ppi.temporary.site\/blog\/wp-json\/wp\/v2\/categories?post=200"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/website-0f9bf4a4.hpx.ppi.temporary.site\/blog\/wp-json\/wp\/v2\/tags?post=200"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}