Hey guys,
I am having some issues with my CIM form and I think they are stemming from iFrameCommunicator not having the right URL. I have been told to update the hostedProfileIFrameCommunicatorUrl in the xml, but I am running this all on the client in js and have no idea how to do that.
I have downloaded the sample code for CIM hosted profile and even that is not closing the popup or hitting the iframeCommunicator.html file.
I have the users token in javascript which I assign to the form values. From there I load the openAddPaymentPopup() function and I am able to successfully save the users information to my Auth.net account. The problem is that the popup is not closing due to iframeCommunicator.html not being hit. Is there a way I can manually assign the iFrameCommunicatorURL property from the popup.js javascript?
What can I do in my javascript to fix this issue?
Thanks.
09-23-2013 11:12 AM
Ok, disregard this issue. I realize now that the issue was caused when the token was generated in my c# and not when the form was loaded in javascript.
http://community.developer.authorize.net/t5/Integration-and-Testing/CIM-hosted-form-option-popup-won...
This link cleared it up for me.
09-23-2013 11:43 AM
The URL is part of getHostedProfilePageRequest, so I'm guessing it's encrypted into the token. Here's the relevant function from the PHP API:
/** * Get the CIM popup token (good for 15 minutes) * * @param int $customerProfileId * * @return AuthorizeNetCIM_Response $response = $request->getHostedProfilePageRequest($profileID, array( 'hostedProfilePageBorderVisible' => 'false', 'hostedProfileHeadingBgColor' => '#E1E1E1', 'hostedProfileIFrameCommunicatorUrl' => "https://{$GLOBALS['_domain']}/contentx/IframeCommunicator.html" )); $token=trim($response->xml->token); */ public function getHostedProfilePageRequest($customerProfileId, $settings = false) { $this->_constructXml("getHostedProfilePageRequest"); $this->_xml->addChild("customerProfileId", $customerProfileId); if ($settings) { $settingsXML = $this->_xml->addChild("hostedProfileSettings"); foreach ($settings as $key => $val) { $settingXML = $settingsXML->addChild("setting"); $settingXML->addChild("settingName", $key); $settingXML->addChild("settingValue", $val); } } return $this->_sendRequest(); }
And then when I call that:
$response = $request->getHostedProfilePageRequest( $company->{'customer-id'}, array( 'hostedProfilePageBorderVisible' => 'false', 'hostedProfileHeadingBgColor' => '#E1E1E1', 'hostedProfileIFrameCommunicatorUrl' => "https://{$GLOBALS['_domain']}/contentx/IframeCommunicator.html" ));
Basically, you need to figure out how to set the hostedProfileIFrameCommunicatorUrl value to the URL path for your /contentx/IframeCommunicator.html page. If it still doesn't work after you do that, it's also possible you have an ancient browser that doesn't know how to do cross-browser interactions. But I don't think that's the problem you're having.
09-23-2013 11:53 AM