2010-06-08 6 views
5

J'ai déjà une caisse express intégrée à mon application Codeigniter. Maintenant, je veux intégrer transparente Paypal où je recueille les informations CC et le transmettre à Paypal (via backend) et une fois que tout est approuvé, mon application le montre à l'utilisateur. Tout cela sans jamais aller sur le site de Paypal.Paypal Payflow pro bibliothèque

Je sais que Paypal donne beaucoup d'exemples de code mais ils ont tellement de produits différents qui annoncent faire la même chose.

Existe-t-il une bibliothèque de wrapper en PHP que je puisse utiliser pour gérer tout cela?

Quelle sorte de décision de conception est impliquée dans la migration vers un tel système? Aurais-je besoin de certificats SSL pour cela?

Répondre

2

J'ai construit un site de commerce électronique dans CodeIgniter, réalisant également une intégration transparente de Paypal.

Il ne semblait pas y avoir de wrappers orientés objet suuuuuper-pretty quand j'ai fait ma chasse, mais j'ai remarqué quelques bonnes tentatives.

Ma solution a fini par être un peu fade. J'ai téléchargé l'API PHP ici: https://cms.paypal.com/cms_content/US/en_US/files/developer/PP_PHP_NVP_Samples.zip

J'enregistré le fichier CallerService.php comme application/helpers/paypal_helper.php et ajouté à application/config/autoload.php pour le tirer dans l'application.

Maintenant, CallerService.php nécessite constants.php, vous devez donc le copier et le coller, ou inclure le fichier constants.php dans votre répertoire helpers. Je viens de copier et coller. Ensuite, assurez-vous de configurer toutes les constantes pour votre compte.

Une fois que est mis en place, mon code ressemblait à ceci:

$nvp_query_string = '&PAYMENTACTION=Sale' 
       . '&AMT='.urlencode($order->total) 
       . '&CREDITCARDTYPE='.urlencode($this->input->post('credit_card_type')) 
       . '&ACCT='.urlencode($this->input->post('acct')) 
       . '&EXPDATE='.urlencode(str_pad($this->input->post('exp_date_month'), 2, '0', STR_PAD_LEFT).'20'.$this->input->post('exp_date_year')) 
       . '&CVV2='.urlencode($this->input->post('cvv2_number')) 
       . '&FIRSTNAME='.urlencode($first_name) 
       . '&LASTNAME='.urlencode($last_name) 
       . '&STREET='.urlencode($order->billing_address_1) 
       . '&CITY='.urlencode($order->billing_city) 
       . '&STATE='.urlencode($order->billing_state) 
       . '&ZIP='.urlencode($order->billing_zip) 
       . '&COUNTRYCODE=US&CURRENCYCODE=USD'; 

    $response = hash_call('doDirectPayment', $nvp_query_string); 
    if (strpos(strtoupper($response['ACK']), 'SUCCESS') !== false) { 
    // Product purchase was successful. 
    } 
    else { 
    // Product purchase was unsuccessful. 
    // The Paypal response will be in $response['ACK']. 
    // The Paypal error message to show the customer will be in $response['L_LONGMESSAGE0']. 
    } 

Il est pas trop élégant, mais ça fonctionne vraiment bien.

De plus, vous avez VRAIMENT besoin d'un certificat SSL. Ceux-ci peuvent être achetés pour 30 $ ou plus pour un seul domaine. Ils sont un peu difficiles à mettre en place au début, mais vous ne pouvez pas passer cette étape. SSL protège la transmission entre l'ordinateur du client et votre serveur, de sorte que leurs informations CC ne peuvent pas être lues lors de leur passage sur tous les serveurs et routeurs (ou reniflés via le wifi) en cours de route. Donc, assurez-vous que, sur le formulaire que vous utilisez pour prendre des informations CC, le formulaire soumet à https: // et non un http: // non sécurisé.

+1

Merci Alan! C'est ce que je cherchais ... ça m'aiderait beaucoup à partir de cette idée et peut-être créer un joli wrapper lib que nous pourrons aussi utiliser dans de futurs projets CI. Si vous avez d'autres conseils/astuces/choses-à-ne-tomber-dans s'il vous plaît faites le moi savoir. – Obaid

0

Je suis à peu près sûr que peu importe si votre site Web prend des données sensibles (c'est-à-dire un numéro de carte de crédit), alors vous avez besoin d'un certificat SSL. À moins qu'ils ne soient sur le serveur de quelqu'un d'autre (paypal.com), vous devez prendre soin de cela. Et, comme vous l'avez dit, vous ne voulez pas les envoyer à paypal.com, alors oui, vous en aurez besoin. De plus, si vous avez déjà intégré la caisse express, vous devriez utiliser un certificat SSL pour cela, n'est-ce pas?