Net::API::Stripe::WebHook::Apache - An Apache handler for Stripe Web Hook
0.1
This is the module to handle Stripe Web Hooks using Apache/mod_perl configuration
Your Apache VirtualHost configuration would look something like this:
<VirtualHost *:443> ServerName example.com:443 ServerAdmin www@example.com DocumentRoot /home/john/example.com DirectoryIndex "index.html" "index.php" CustomLog "${APACHE_LOG_DIR}/example.com-access.log" combined ErrorLog "${APACHE_LOG_DIR}/example.com-error.log" LogLevel warn <Directory "/home/john/example.com"> Options All +MultiViews -ExecCGI -Indexes +Includes +FollowSymLinks AllowOverride All </Directory> ScriptAlias "/cgi-bin/" "/home/john/example.com/cgi-bin/" <Directory "/home/john/example.com/cgi-bin/"> Options All +Includes +ExecCGI -Indexes -MultiViews AllowOverride All SetHandler cgi-script AcceptPathInfo On Require all granted </Directory> <IfModule mod_perl.c> PerlOptions +GlobalRequest PerlPassEnv MOD_PERL PerlPassEnv PATH_INFO PerlModule Apache2::Request <Perl> unshift( @INC, "/home/john/lib" ); </Perl> <Location /hook> SetHandler perl-script ## Switch it back to modperl once the soft is stable # SetHandler modperl PerlSendHeader On PerlSetupEnv On PerlOptions +GlobalRequest PerlResponseHandler Net::API::Stripe::WebHook::Apache Options +ExecCGI Order allow,deny Allow from all </Location> </IfModule> SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem Include /etc/letsencrypt/options-ssl-apache.conf SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem </Virtualhost>
The key part is the line with PerlResponseHandler and value Net::API::Stripe::WebHook::Apache. This will tell Apache/mod_perl that our module will handle all http request for this particular location.
PerlResponseHandler
So, if we get an incoming event from Stripe at https://example.com/hook/d18bbab7-e537-4dba-9a1f-dd6cc70ea6c1, we receive d18bbab7-e537-4dba-9a1f-dd6cc70ea6c1 as part of the path info, and we call validate_webhook() to validate it before processing the event incoming packet.
d18bbab7-e537-4dba-9a1f-dd6cc70ea6c1
Apache will call our special method handler(), which will invoque validate_webhook() that should be overriden by your module, and which must return either true or false. Upon successful return from validate_webhook(), handler will create a new constructor such as $class->new()
What you want to do is inherit Net::API::Stripe::WebHook::Apache and set your own module in Apache configuration, like so:
Net::API::Stripe::WebHook::Apache
PerlResponseHandler My::WebHookHandler
The inherited handler will be called by Apache with the class My::WebHookHandler and the apache Apache2::RequestRec object. As we wrote above, once validated, handler will initiate an object from your module by calling My::WebHookHandler-new( object => Net::API::Stripe::Event, request => Net::API::REST::Request, response => Net::API::REST::Response )> where each package name are an object. object represents the event packet received from Stripe. request is an object to access great number of method to access the Apache API, and response is an object to access Apache API to provide a reply. See the manual page for each of those package.
My::WebHookHandler-
object
request
response
Creates a new Net::API::Stripe::WebHook::Apache objects. This should be overriden by your own package.
This is called by Apache/mod_perl upon incoming http request
Toggles verbose mode on/off
Toggles debug mode on/off
{ "object": "balance", "available": [ { "amount": 0, "currency": "jpy", "source_types": { "card": 0 } } ], "connect_reserved": [ { "amount": 0, "currency": "jpy" } ], "livemode": false, "pending": [ { "amount": 7712, "currency": "jpy", "source_types": { "card": 7712 } } ] }
Initial version
Jacques Deguest <jack@deguest.jp>
Stripe API documentation:
https://stripe.com/docs/api
Copyright (c) 2018-2019 DEGUEST Pte. Ltd.
You can use, copy, modify and redistribute this package and associated files under the same terms as Perl itself.
1 POD Error
The following errors were encountered while parsing the POD:
You forgot a '=back' before '=head1'
To install Net::API::Stripe, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Net::API::Stripe
CPAN shell
perl -MCPAN -e shell install Net::API::Stripe
For more information on module installation, please visit the detailed CPAN module installation guide.