ci-merchant purchase() not working - codeigniter

Im using the ci-merchant library in my PyroCMS module locally on my development WAMP server. (all working fine)
When I upload to my Linux test server the purchase() function being called does not seem to work.
When it executes it pools for 5 minutes then I get a response "Could not connect to host".
PHP
$params =
array(
'amount' => 20,
'currency' => 'USD',
'return_url' => 'http://someurl.com/return/'
'cancel_url' => 'http://someurl.com/cancel/'
);
$settings = array(
'test_mode' => TRUE,
'username' => 'PAYPAL_TEST_USERNAME'
'password' => 'MY_PAPAL_TEST_PASS'
'signature' => 'MY_PAYPAL_TEST_SIG'
);
$this->load->library('merchant');
$this->merchant->load('paypal_express');
$this->merchant->initialize($settings);
//this is where Im having the issue
$response = $this->merchant->purchase($params);
$message = $response->message();
When I echo $message
echo $message; //Outputs: couldn't connect to host"
CURL - Server Settings
Below is a list of the differences in the CURL settings on the servers. Perhaps this is the issue. I dont think these settings can be changed without having to compile curl but im not sure.
Development Server (WAMP server - status:Working)
AsynchDNS : Yes
CurlInfo : 7.21.7
GSS Neg : Yes
IDN : No
SSPI : Yes
libSSH : libssh2/1.2.7
Test Server (Linuxserver - status:Not working)
AsynchDNS : No
CurlInfo : 7.24.0
GSS Neg : No
IDN : Yes
SSPI : No
libSSH : <<not listed>>

After much trial and error and some advice from friends I found this to be a missing libSSH module.
Since then I have moved my site from a shared hosting company to a more reliable VPS Hosting.
I installed the appropriate libraries and everything is working fine.
I would recommend anyone hosting their sites to moving away from any "shared" hosting companies. I only encountered very delayed support and VPS Hosting wasnt really that much more than what I was paying for VPS.
But you will need to know how to manage a server before you do.

Related

How to resolve Peer certificate not matching expected for a PDO connection?

I am trying to set up an SSL connection between application (Laravel) server and mysql 8 server. I have looked around for a solution and the most suggested solution is to set verify server cert to false which i have in my database config below.
But I seem to still be getting this error. Is there another corresponding setting somewhere else I need to check?
PDOException::("PDO::__construct(): Peer certificate CN=MySQL_Server_8.0.16_Auto_Generated_Server_Certificate did not matc
h expected CN=`IPADDRESS'")
'options' => array_filter([
PDO::MYSQL_ATTR_SSL_CA => 'mysql_client_ssql/ca.pem',
PDO::MYSQL_ATTR_SSL_CERT => 'mysql_client_ssql/client-cert.pem',
PDO::MYSQL_ATTR_SSL_KEY => 'mysql_client_ssql/client-key.pem',
PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => false,
]),

Yii2 - Use APC cache from console

I am trying to make console command to add data to the APC cache, but so far without any success.
This code works perfectly when I run it as a standard action (controller/action):
public function actionUpdateExchangeRate()
{
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_URL => 'https://openexchangerates.org/api/latest.json?app_id=xxxxxxx',
CURLOPT_USERAGENT => 'Exchange Rates'
));
$json = curl_exec($curl);
curl_close($curl);
$rates = json_decode($json);
Yii::$app->cache->set('rates', $rates->rates);
}
I made a command with the same code, and when I try to set the cache, nothing is happening.
var_dump('<pre>', Yii::$app->cache->set('rates', $rates->rates), '</pre>');die;
Dump give true when run as a controler/action, and false when run from the command.
In the console.php I added this configuration to the component (it is same in the web.php):
'cache' => [
'class' => 'yii\caching\ApcCache',
'keyPrefix' => 'test',
'useApcu' => true
],
PHP version is:
PHP 7.2.4-1+ubuntu16.04.1+deb.sury.org+1 (cli) (built: Apr 5 2018 08:53:57) ( NTS )
Any idea what I am doing wrong here?
Make sure that you have enabled apc.enable_cli in php.ini.
But using ApcCache for console does not make much sense. APCu cache is per process, so it will be removed anyway after command is ended and console commands will not share cache with web requests.
Mostly for testing and debugging. Setting this enables APC for the CLI version of PHP. Under normal circumstances, it is not ideal to create, populate and destroy the APC cache on every CLI request, but for various test scenarios it is useful to be able to enable APC for the CLI version of PHP easily.
https://secure.php.net/manual/en/apcu.configuration.php#ini.apcu.enable-cli

Unable to connect to remote server - Laravel 4.1

I want to execute some commands in a remote server using SSH.
This is my configuration :
'connections' => [
'production' => [
'host' => '172.55.81.20',
'username' => 'user',
'password' => '',
'key' => 'C:\cygwin64\home\oqannouf\.ssh\id_rsa'
],]
I tried this SSH::into('production')->run(['ls']);
but i get the following error:
Unable to connect to remote server
with no additional informations explaining why it doesn't work.
Note:
the RSA key is correct and i can use it to login to the server using cygwin.
Even with a correct password it doesn't work.
I have all the permissions on the folder C:\cygwin64\home\oqannouf.ssh\

Fatal Error caused from failed upgrade - restore - CS Cart 4.2.4 > 4.3.1

I have recently upgraded my CS Cart website from 4.2.4 to 4.3.1
We have a custom theme installed so encountered a few issues that we didnt have time to address immediatley - so as per instruction, re ran the restore.
Now we have the following fatal error and I don't really know where to start. I am not much of a dev, but can follow instruction and am quite technically minded.
Thanks for any help in advance.
To fix the assets issue please open the config.local.php file in the root directory and replace:
'custom_files' => array(
'dir' => & $config['dir']['var'],
'prefix' => 'custom_files'
)
with
'custom_files' => array(
'dir' => & $config['dir']['var'],
'prefix' => 'custom_files'
),
'assets' => array(
'dir' => & $config['dir']['cache_misc'],
'prefix' => 'assets',
'cdn' => true
),
This is a very interesting issue. I think the fastest way to resolve it, to contact the official CS-Cart Support Team. If you have a legal license, you have support credits, ask the team to resolve the issue will be free.

Using gmail smtp via Laravel: Connection could not be established with host smtp.gmail.com [Connection timed out #110]

When I try to use GMail SMTP for sending email via Laravel, I encounter the following error:
Swift_TransportException
Connection could not be established with host smtp.gmail.com [Connection timed out #110]
It is the trace of the error:
...
}
$this->_stream = #stream_socket_client($host.':'.$this->_params['port'], $errno, $errstr, $timeout, STREAM_CLIENT_CONNECT, stream_context_create($options));
if (false === $this->_stream) {
throw new Swift_TransportException(
'Connection could not be established with host ' . $this->_params['host'] .
' [' . $errstr . ' #' . $errno . ']'...
and here are my configuration for mail:
'driver' => 'smtp',
'host' => 'smtp.gmail.com',
'port' => 587,
'from' => array('address' => 'some#example.ir', 'name' => 'some'),
'encryption' => 'tls',
'username' => 'myemail#gmail.com',
'password' => 'mypassword',
'sendmail' => '/usr/sbin/sendmail -bs',
'pretend' => false
I use a shared host and the port 587 on localhost is open.
I had the same problem and I resolved it in this way:
'driver' => 'sendmail',
You need to change only that line.
After doing lot of research I found this one helpful.
https://www.google.com/settings/security/lesssecureapps.
Open the above link .
Click on Enable. And save it.
Then try to send email again.
For me it worked .
Solved mine by changing my .env file as follows:
'driver' => 'sendmail',
Try
'encryption' => 'ssl',
'port' => 465,
The problem is that smtp.gmail.com is resolving an IPv6 address and that google service only listens on IPv4. What you need to do is set the source IP to ensure domains resolve as IPv4 and not IPv6.
The important method:
->setSourceIp('0.0.0.0')
How you might use it in code:
$this->_transport = Swift_SmtpTransport::newInstance
(
'smtp.gmail.com',
465,
'ssl'
)
->setUsername('username')
->setSourceIp('0.0.0.0')
->setPassword('password');
Works for me with same settings except encryption and port. Change to:
'encryption' => ssl,
'port' => 465,
Since this is only for localhost encryption line should also be environment specific. So instead above I did following:
env('MAIL_ENCRYPTION','tls'),
Now you can set this in .env file, which is environment specific and should be in .gitignore
I got the same problem using laravel forge + digitalocean.
I find when i try telnet smtp.gmail.com 465
telnet smtp.gmail.com 465
Trying 2404:6800:4003:c00::6d... # more than 30 sec
Trying 74.125.200.108... # less 1 sec
Connected to smtp.gmail.com.
Maybe is IPv6 that it Connection timed out.
So,I change gai.conf to prioritize ipv4 over ipv6
vi /etc/gai.conf
#For sites which prefer IPv4 connections change the last line to
precedence ::ffff:0:0/96 100
...
# For sites which use site-local IPv4 addresses behind NAT there is
# the problem that even if IPv4 addresses are preferred they do not
# have the same scope and are therefore not sorted first. To change
# this use only these rules:
#
scopev4 ::ffff:169.254.0.0/112 2
scopev4 ::ffff:127.0.0.0/104 2
scopev4 ::ffff:0.0.0.0/96 14
open your .env file and change this
MAIL_DRIVER=smtp
TO
MAIL_DRIVER=sendmail
this fixed my problem, hope it will help you as well.
The error might be due to 2 step verification enabled. In that case you need to create gmail app password and use this as password.
For me after trying all above solution the only thing that worked for my was
Disabling My Firewall and Antivirus temporarily
If it is a non-Google Apps account, definitely enable access from less secure apps as suggested. If you don't do that, it won't work.
If it is a Google Apps account (ie it's a business account) then there is an admin panel that governs access. You will need to make sure it is only specifying access by authentication and not by IP, since if it is by IP your IP presumably is not on the list.
The final thing to try is using the IPv4 address of smtp.gmail.com in place of that domain name in your code. I found that mine would not connect using the domain (because that resolved to an IPv6 address) but would connect when I used the raw IP in its place.
I got the same problem using Swiftmailer
Anyway, a quick dirty hack you should not use would be to edit swiftmailer\swiftmailer\lib\classes\Swift\Transport\StreamBuffer.php. In _establishSocketConnection() line 253 replace:
$options = array();
with something like this:
$options = array('ssl' => array('allow_self_signed' => true, 'verify_peer' => false));
This will change the ssl options of stream_context_create() (a few lines below $options):
$this->_stream = #stream_socket_client($host.':'.$this->_params['port'], $errno,
$errstr, $timeout, STREAM_CLIENT_CONNECT, stream_context_create($options));
There is a dirty hack for this You can find it here
Also my ENV is set to
MAIL_DRIVER=smtp
MAIL_HOST=mail.mydomain.com
MAIL_PORT=587
MAIL_USERNAME=noreply#mydomain.com
MAIL_PASSWORD=mypassword
In your terminal use this command
sudo ufw allow in "Postfix Submission"
this enable port 587 for SMTP
you need to create 2 factor auth and custom password in google account. Also don't forget to add custom password for every new host you are using.
For temporary fix you can resolved the issue by updating env file as 'driver' => 'sendmail'
Check your free disk space. On my case, I have 100% used.
I am using MAMP on MAC. I face this Issue Step to Follow to solve this problem on MAC
SMTP MAIL on MAC OS
Create a file to store our credentials:
sudo vim /etc/postfix/sasl_passwd
Add something like this:
smtp.gmail.com:587 username#gmail.com:password
Now run:
sudo postmap /etc/postfix/sasl_passwd
Prepare the postfix main config file:
sudo vim /etc/postfix/main.cf
Add/update these lines
relayhost=smtp.gmail.com:587
smtp_sasl_auth_enable=yes
smtp_sasl_password_maps=hash:/etc/postfix/sasl_passwd
smtp_use_tls=yes
smtp_tls_security_level=encrypt
tls_random_source=dev:/dev/urandom
smtp_sasl_security_options = noanonymous
smtp_always_send_ehlo = yes
smtp_sasl_mechanism_filter = plain
Stop/Start the service
sudo postfix stop
sudo postfix start
Check the queue for any errors
mailq
Your .env configuration should look like this
MAIL_MAILER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME="username#gmail.com"
MAIL_PASSWORD="password"
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS="username#gmail.com"
MAIL_FROM_NAME="${APP_NAME}"

Resources