FedEx and Expresso Store Integration - expressionengine

I'm using Expresso's Store with Expression Engine and having trouble getting the FedEx shipping plugin to work with my test credentials. I set up a developer account with FedEx and entered the corresponding codes into the Store Settings. When I test using the sample store template, I receive an error "Error communicating with shipping provider."
Should I be testing using Test Mode = "False" or "True"?

Try opening store/libraries/store_shipping_fedex.php, and around line 80 inside calculate_shipping($order), add the following line:
echo '<pre>'; print_r($response); exit; // add this line
return $this->_parse_response($response);
Then run through your checkout process again (or just click "Update Totals"). That should print out the full response from FedEx, which should be helpful in diagnosing your issue.
If possible, update your question above with the response it returns, as it may be helpful to others.

Related

Not able to make mSuperdrive and mBeam API Calls in the Postman Collection

I am trying to make mSuperdrive and mBeam API Calls as in the Smart-car-use case ( [ Group C – Car 1] in the postman Collection). When I made the [C1] → mSuperdrive LOCAL DISCOVERY api call (to see the Link Local clustering) I can find both of my devices in the response object,
but along with the response I am getting the following error.
This is an error coming from postman's "Tests" tab, we have put some code in there to extract data from response body in order to set environment variables. If you are getting a 200 OK response with your devices showing you can simply ignore this error. You can also comment out the code in "Test" tab and you will not see the error for that call again. Please periodically check here for new updates to the collection that will fix these issues in the future.

I'm getting this Docusign Error CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY

One of my colleagues have originally posted this question at Salesforce StackExchange but we were also advised to post it here since there might be more devs familiar here on DocuSign.
We're creating a Salesforce app that sends a PDF file to DocuSign for signing. However, when DocuSign returns the PDF, it gives us an error.
We've configured the DocuSign sandbox to return the document back to Salesforce using the information in this link: https://support.docusign.com/articles/DocuSign-for-Salesforce-Adding-Completed-Documents-to-the-Notes-and-Attachments-New
Here is the error we get in the Docusign logs when it tries to return the document back to Salesforce:
SFIntegration unable to add attachment to SF ID: 8001X000000TvWdQAK,
SF Table: Contract, Error: Unable for insert (ShareType=I)
ContentDocumentLink for Test_Completed.Error:ErrorCode =
CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY, fields = .Unable to insert
(ShareType=V) ContentDocumentLink for Test_Completed.Error:ErrorCode =
CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY, fields =
Can anyone help us what is the error all about? Thanks.
I had the similar issue. I changed the version to 39 using 'Reconfigure Login' link for the connection and it worked !
Do you have a salesforce trigger? it's probably failing and then trying to roll back the changes.
Also, check if you have "Use Content Files" checked and what version of the API you're using. If you are using V2.1 with this checkbox - you may be getting this error.
(Later Edit):
You Must install Connect for Salesforce with 39 selected. If you had 21 selected and later change to 39 - that won't work, must have it from the beginning.

Docusign eventNotification is failing with error 400

I am using Docusign's REST API to create and send envelopes. I've included eventNotifications with requireAcknowledgment as true to get requests from Docusign whenever there's status change. I used ngrok while development and testing and everything worked as expected.
I've moved the project online and have edited the eventNotification's url to live url with https and that's when all the callbacks are getting logged in failed section in Docusign's admin panel.
The error message shown in admin panel is -
'https://xxx.xxxxxxx.com/webhook.php :: Error - The remote server
returned an error: (400) Bad Request.'
I've downloaded the failed request's xml body and tried sending a request through postman and it worked as expected. Iv'e tried everything to debug this error and have not found error at my end.
Edit:
The code that I've tried with is the same code from DocuSign's webhook sample page -
$data = file_get_contents('php://input');
$xml = simplexml_load_string ($data, "SimpleXMLElement", LIBXML_PARSEHUGE);
$envelope_id = (string)$xml->EnvelopeStatus->EnvelopeID;
$time_generated = (string)$xml->EnvelopeStatus->TimeGenerated;
$files_dir = getcwd() . '/' . $this->xml_file_dir;
if(! is_dir($files_dir)) {mkdir ($files_dir, 0755);}
$envelope_dir = $files_dir . "E" . $envelope_id;
if(! is_dir($envelope_dir)) {mkdir ($envelope_dir, 0755);}
$filename = $envelope_dir . "/T" .
str_replace (':' , '_' , $time_generated) . ".xml"; // substitute _ for : for windows-land
$ok = file_put_contents ($filename, $data);
if ($ok === false) {
error_log ("!!!!!! PROBLEM DocuSign Webhook: Couldn't store $filename !");
exit (1);
}
// log the event
error_log ("DocuSign Webhook: created $filename");
if ((string)$xml->EnvelopeStatus->Status === "Completed") {
// Loop through the DocumentPDFs element, storing each document.
foreach ($xml->DocumentPDFs->DocumentPDF as $pdf) {
$filename = $this->doc_prefix . (string)$pdf->DocumentID . '.pdf';
$full_filename = $envelope_dir . "/" . $filename;
file_put_contents($full_filename, base64_decode ( (string)$pdf->PDFBytes ));
}
}
I've also tried with simple code that just sets header to 200
http_response_code(200);
Sorry you're having so much trouble with the webhook feature. Hopefully this answer will be of assistance.
1. Try a test PHP program to check connectivity, etc:
<?php
header('Content-Type: text/html');
echo "OK!";
$h = fopen('/tmp/listener_access.log', 'a');
if ($h) {
$now = DateTime::createFromFormat('U.u', microtime(true), new DateTimeZone('UTC'));
fwrite ($h, $now->format ("Y-m-d_l.h.i.s.v "));
fwrite($h, $_SERVER["REMOTE_ADDR"] . " " . $msg . "\n");
fclose($h);
} else {
error_log ("### Could not open log file!");
}
Store it as ok.php in your web server directory. Then try (from a browser on a different network) to reach https://yourserver.company.com/ok.php You should see "ok" in the browser window.
Then use the same url in your eventNotification section of your Envelopes::create call to see if it all works. You should see a success in the Connect log, etc.
2. Stepwise debugging of your PHP listener
There are a number of issues to rule-out (as diagnosticians say) with your php listener app.
Basic connectivity with the listener. Since DocuSign is receiving a 400 error from your app, connectivity is ok.
Platform errors with your app. This is a problem with your PHP software stack setup that is causing the stack (not your PHP app, per se) to reject the request.
The usual indicator for this is your web server's error log. Have you looked at it? What is on the logging line where you see the 400 response from your server to DocuSign? If you don't see the 400 response to DocuSign then something is wrong with your web server's setup.
A common platform error with PHP and other stacks when default settings are used is maximum_post_size_exceeded. This is happens if you have requested that DocuSign include your envelope's documents in the notification message.
A good test is to temporarily change your envelope create code to not include documents in the notification messages.
Fixes: a good fix is to not include the envelope documents in the notification message. Instead, after the message is received, make separate API calls to retrieve the documents.
The other fix is to increase the maximum post body size. You may need to increase it both in the PHP settings and in the underlying web server's settings too. (By the way, which web server are you using?)
You are processing the incoming notification in the response thread of your server/php app. This really isn't the best technique (I will be updating the DocuSign example page in the future with this information.)
The best technique is to use the following pattern:
1. Receive the incoming notification message from DocuSign
2. Put the message onto a reliable FIFO queue
3. Respond to DocuSign with a 200 response.
Then, in a separate thread of execution, a
different software application "works off" the
entries in the queue.
Your web server, for example, may be timing out your PHP program. This probably isn't happening in your case, but others may experience this.
I think I would, next, add more debugging statements to your PHP program to try and understand what is happening to it. You can either do this with error-log
or copy the technique from my example (above) and write to a file in /tmp. (Assuming a Linux server.)
The other option is to increase the debugging level of the php stack itself, or of your web server, or both.
3. Last thoughts
400 in the DocuSign logs usually indicates that DocuSign reached your server and it returned a 400 status code. This can be confirmed by examining your server log (regular or error), there should be a matching entry.
If there isn't an entry in your server log, but the "ok.php" program from above does work, then it would be time to comment out big chunks of code from your PHP program, and then do another test from DocuSign. Eventually, using a binary-search technique (See step 8 in the article), you find the code that is causing the problem.
Commenting out code as part of a binary-search to find the bug is a very common, and powerful debugging technique.
HTH, Larry

Debugging Groovy in Jira Scriptrunner inline editor

I'm a programmer who is just getting started working with groovy in Jira in order to automate some tasks.
I'm trying to write a custom listener script using the inline editor in Jira, but haven't gotten past trying to get a Hello World program to work.
I don't know if the script is running, and can't see any output, and I really need some help with figuring out how to debug the script, preferably through outputs to some kind of console (or even just by reading the Jira logs if necessary), just so that I can actually start trying to learn how to use this tool.
I'm working with the information HERE as a general guideline to start learning to work with the inline editor.
For a little more context, you can see another related question that I asked HERE.
I've set the debug level to DEBUG for the event which I'm attaching the listener, as shown in this screenshot, based on the information found HERE:
Here is a screenshot of the inline editor I'm working in in JIRA. In this screenshot, I'm just trying to output 'Hello', and have just clicked the 'Preview' button:
As you can see, in the 'Result' tab at the bottom of the screen, there is nothing of interest. The 'Logs' tab is also empty, and the 'Timing' tab just says 'Elapsed: 0 ms CPU time: 0 ms', so it seems like nothing if happening.
If I check the log on the server (in the file catalina.2017-10-13.txt), I see the following output:
13-Oct-2017 07:01:50.942 WARNING [http-nio-8080-exec-6] com.sun.jersey.spi.container.servlet.WebComponent.filterFormParameters A servlet request, to the URI http://somevmserver:8080/rest/scriptrunner-jira/latest/listeners/com.onresolve.scriptrunner.canned.jira.workflow.listeners.CustomListener/params, contains form parameters in the request body but the request body has been consumed by the servlet or a servlet filter accessing the request parameters. Only resource methods using #FormParam will work as expected. Resource methods consuming the request body by other means will not work as expected.
13-Oct-2017 07:02:26.740 WARNING [http-nio-8080-exec-12] com.sun.jersey.spi.container.servlet.WebComponent.filterFormParameters A servlet request, to the URI http://somevmserver:8080/rest/scriptrunner/latest/canned/com.onresolve.scriptrunner.canned.common.StaticCompilationChecker, contains form parameters in the request body but the request body has been consumed by the servlet or a servlet filter accessing the request parameters. Only resource methods using #FormParam will work as expected. Resource methods consuming the request body by other means will not work as expected.
13-Oct-2017 07:02:26.974 WARNING [http-nio-8080-exec-1] com.sun.jersey.spi.container.servlet.WebComponent.filterFormParameters A servlet request, to the URI http://somevmserver:8080/rest/scriptrunner-jira/latest/listeners/com.onresolve.scriptrunner.canned.jira.workflow.listeners.CustomListener/preview, contains form parameters in the request body but the request body has been consumed by the servlet or a servlet filter accessing the request parameters. Only resource methods using #FormParam will work as expected. Resource methods consuming the request body by other means will not work as expected.
This output doesn't mean a whole lot to me, but it seems apparent that it's being populated as a result of trying to preview the script.
I'm not getting any errors in the inline editor, and it's really simple code, so I don't think it's that.
The only other information I can include that I think is pertinent is that this is a test instance of Jira cloned from our production environment, and its base URL is still set to the URL of the prod environment. Not sure if that has any bearing, but I'm not really a Jira admin, just the programmer tasked with doing this, so I don't want to go fiddling around where I don't need to.
Thanks!
When using scriptrunner within jira, you'll need to import the logger to use the debugger or to output to the console. This can be done with the following:
// Enable debugger
import org.apache.log4j.Logger
import org.apache.log4j.Level
def log = Logger.getLogger("com.acme.CreateSubtask")
log.setLevel(Level.DEBUG)
And then, you'll be able to see the logged information using log.debug "hello"
To see your debug message "Hello" in the log, you must update a issue in your selected project. The Result, Logs and Timing Tabs at the bottom are useless in this view. Just trigger the Listener with a issue update in your selected project and search your debug message in the atlassian-jira.log file.
Hint: To view the Log in the browser you can use this jira app https://marketplace.atlassian.com/plugins/com.cps.lastLog/server/overview

How to get default log details of lotusscript agent

I developed an notes application called "agent monitoring" which will trigger email daily when the schedule agent prints an error in the log.nsf file.
2017-03-28 09:39:42 AMgr: Agent ('GoSAP' in '\DomApps\GoSAP.nsf') error message: MQJE001: Completion Code '2', Reason '2033'.
I search for details using an "error message" regular expression string in the log and then send email.
Now I would like to handle when the agent hangs. I think it can be done if we get details from the default agent log as shown here.
Can somebody please guide me on how to achieve this?
[EDIT]==> look at #Richard Schwartz response, it seems possible with NotesDXLExporter.
[Original response]
This is not possible programmatically in Notes.
Remark: if you have a client running, you can use sendkey (windows dll not the notes function that is buggy) to display the log.
This question has also been asked years ago in experts-exchange
also without solution there.
The agent log can be accessed this way.
For eaach database that you are interested in, set up a NotesNoteCollection with SelectAgents=true and call BuildCollection.
Iterate through the collection with getFirstNoteId/getNextNoteId and get the agent notes via GetDocumentByID
Use NotesDXLExporter with the agent note as input to generate XML, then parse the XML and read the <trigger type> and/or <agent name> data to determine if you care about the agent. If it's a scheduled agent that you want to monitor, then look at the <runlog> data.

Resources