Question

Je prévois d'intégrer un système de paiement Google Checkout sur un site Web de réseau social. L'idée est que les membres peuvent acheter des "jetons". pour de l'argent réel (qui est en quelque sorte la devise du site Web) et ils peuvent ensuite acheter un accès à du contenu supplémentaire sur le site Web, etc.

Je souhaite créer un bouton Google Checkout permettant à un membre d'accéder à la page de paiement où il paie avec sa carte de crédit ou de débit. Ce que je veux, c’est que Google Checkout avertisse mon serveur si l’achat de jetons a abouti (si la carte de paiement est débitée) afin que je puisse mettre à jour la base de données locale.

Le site Web est codé en PHP / MySQL.

J'ai téléchargé l'exemple de code PHP à partir d'ici: code.google.com/p/google-checkout-php-sample-code/wiki/Documentation

Je sais comment créer un bouton Google Checkout et j'ai également placé le fichier responsehandlerdemo.php sur mon serveur. Il s’agit du fichier auquel Google Checkout est censé envoyer une réponse (bien sûr, je règle le chemin du fichier dans le compte marchand Google).

Le fichier du gestionnaire de réponses contient maintenant un bloc de commutation avec plusieurs instructions case. Lequel signifie que le paiement a été effectué et que je peux ajouter des jetons au compte du membre dans la base de données locale?

  switch ($root) {
case "request-received": {
  break;
}
case "error": {
  break;
}
case "diagnosis": {
  break;
}
case "checkout-redirect": {
  break;
}
case "merchant-calculation-callback": {
  // Create the results and send it
  $merchant_calc = new GoogleMerchantCalculations($currency);

  // Loop through the list of address ids from the callback
  $addresses = get_arr_result($data[$root]['calculate']['addresses']['anonymous-address']);
  foreach($addresses as $curr_address) {
    $curr_id = $curr_address['id'];
    $country = $curr_address['country-code']['VALUE'];
    $city = $curr_address['city']['VALUE'];
    $region = $curr_address['region']['VALUE'];
    $postal_code = $curr_address['postal-code']['VALUE'];

    // Loop through each shipping method if merchant-calculated shipping
    // support is to be provided
    if(isset($data[$root]['calculate']['shipping'])) {
      $shipping = get_arr_result($data[$root]['calculate']['shipping']['method']);
      foreach($shipping as $curr_ship) {
        $name = $curr_ship['name'];
        //Compute the price for this shipping method and address id
        $price = 12; // Modify this to get the actual price
        $shippable = "true"; // Modify this as required
        $merchant_result = new GoogleResult($curr_id);
        $merchant_result->SetShippingDetails($name, $price, $shippable);

        if($data[$root]['calculate']['tax']['VALUE'] == "true") {
          //Compute tax for this address id and shipping type
          $amount = 15; // Modify this to the actual tax value
          $merchant_result->SetTaxDetails($amount);
        }

        if(isset($data[$root]['calculate']['merchant-code-strings']
            ['merchant-code-string'])) {
          $codes = get_arr_result($data[$root]['calculate']['merchant-code-strings']
              ['merchant-code-string']);
          foreach($codes as $curr_code) {
            //Update this data as required to set whether the coupon is valid, the code and the amount
            $coupons = new GoogleCoupons("true", $curr_code['code'], 5, "test2");
            $merchant_result->AddCoupons($coupons);
          }
         }
         $merchant_calc->AddResult($merchant_result);
      }
    } else {
      $merchant_result = new GoogleResult($curr_id);
      if($data[$root]['calculate']['tax']['VALUE'] == "true") {
        //Compute tax for this address id and shipping type
        $amount = 15; // Modify this to the actual tax value
        $merchant_result->SetTaxDetails($amount);
      }
      $codes = get_arr_result($data[$root]['calculate']['merchant-code-strings']
          ['merchant-code-string']);
      foreach($codes as $curr_code) {
        //Update this data as required to set whether the coupon is valid, the code and the amount
        $coupons = new GoogleCoupons("true", $curr_code['code'], 5, "test2");
        $merchant_result->AddCoupons($coupons);
      }
      $merchant_calc->AddResult($merchant_result);
    }
  }
  $Gresponse->ProcessMerchantCalculations($merchant_calc);
  break;
}
case "new-order-notification": {
  $Gresponse->SendAck();
  break;
}
case "order-state-change-notification": {
  $Gresponse->SendAck();
  $new_financial_state = $data[$root]['new-financial-order-state']['VALUE'];
  $new_fulfillment_order = $data[$root]['new-fulfillment-order-state']['VALUE'];

  switch($new_financial_state) {
    case 'REVIEWING': {
      break;
    }
    case 'CHARGEABLE': {
      //$Grequest->SendProcessOrder($data[$root]['google-order-number']['VALUE']);
      //$Grequest->SendChargeOrder($data[$root]['google-order-number']['VALUE'],'');
      break;
    }
    case 'CHARGING': {
      break;
    }
    case 'CHARGED': {
      break;
    }
    case 'PAYMENT_DECLINED': {
      break;
    }
    case 'CANCELLED': {
      break;
    }
    case 'CANCELLED_BY_GOOGLE': {
      //$Grequest->SendBuyerMessage($data[$root]['google-order-number']['VALUE'],
      //    "Sorry, your order is cancelled by Google", true);
      break;
    }
    default:
      break;
  }

  switch($new_fulfillment_order) {
    case 'NEW': {
      break;
    }
    case 'PROCESSING': {
      break;
    }
    case 'DELIVERED': {
      break;
    }
    case 'WILL_NOT_DELIVER': {
      break;
    }
    default:
      break;
  }
  break;
}
case "charge-amount-notification": {
  //$Grequest->SendDeliverOrder($data[$root]['google-order-number']['VALUE'],
  //    <carrier>, <tracking-number>, <send-email>);
  //$Grequest->SendArchiveOrder($data[$root]['google-order-number']['VALUE'] );
  $Gresponse->SendAck();
  break;
}
case "chargeback-amount-notification": {
  $Gresponse->SendAck();
  break;
}
case "refund-amount-notification": {
  $Gresponse->SendAck();
  break;
}
case "risk-information-notification": {
  $Gresponse->SendAck();
  break;
}
default:
  $Gresponse->SendBadRequestStatus("Invalid or not supported Message");
  break;

}

Je suppose que le cas "CHARGÉ" est celui qui convient, n'est-ce pas?

Deuxième question, ai-je besoin d'un certificat SSL pour recevoir une réponse de Google Checkout? Selon ce que je fais: groups.google.com/group/google-checkout-api-php/browse_thread/thread/10ce55177281c2b0

Mais je ne le vois pas mentionné nulle part dans la documentation officielle.

Merci.

Était-ce utile?

La solution

Je l'ai intégré à mon site il y a plus de 6 mois. Son volume est très faible, mais fonctionne bien jusqu'à présent.

La première chose à laquelle vous devez vous soucier est "CHARGEABLE". Cela signifie que la carte de crédit a été approuvée pour la transaction, mais elle ne facturera pas les fonds tant que vous n'agissez pas. Pour envoyer la demande de facturation, il suffit de commenter les deux lignes sous CHARGEABLE. Vous pouvez modifier vos paramètres pour que la carte soit automatiquement chargée dans les "paramètres" > "préférences", mais vous pouvez également commenter les 2 lignes et laisser vos options ouvertes.

Notez que vous voudrez peut-être ATTENDRE la "notification d’information sur les risques" et déterminer si la vérification du risque a été réussie avant d’approuver la charge ($ data [$ root] ["information-risque"] ["éligible-pour- protection '] [' VALEUR ']). Bien que, semble-t-il, vous parliez de produits numériques, la possibilité de rétrofacturation n’a peut-être pas d'importance pour vous.

À un moment donné, vous devriez également vérifier que la demande contient suffisamment d’informations pour lier les fonds à un compte avant de les facturer, mais c’est peut-être juste ma paranoïa.

L'autre état que j'utilise est la "notification du montant de la facturation". Il est tout à fait possible qu'il existe un moyen d'utiliser «facturé», mais je ne pense pas que «facturé» fournisse un montant qui a été facturé. ($ amount_charged = $ data [$ root] ['total-charge-montant'] ['VALEUR'];)

En ce qui concerne SSL, si vous vérifiez l’emplacement où vous entrez l’URL de rappel, vous indiquez ce qui suit: " Spécifiez une URL pour que Google vous avertisse des nouvelles commandes et des modifications de l'état de celles-ci. Vous devez fournir l'URL d'un serveur exécutant SSLv3 ou TLS 128 bits "

".

Répondre à votre commentaire: Je fais cela sous 'new_order_notification', je ne sais pas si vous pouvez le faire ailleurs.

$items = get_arr_result( $data[$root]['shopping-cart']['items']['item'] ); 
foreach( $items as $item ) { 
   if( !isset ( $item['merchant-item-id']['VALUE'] ) ) { 
     //error 
     return; 
   } 
   $request_item_id = $item['merchant-item-id']['VALUE']; 
   //save your item id with corresponding google order id for further processing
}

Autres conseils

Oui, " Facturable " est la première chose à examiner dans une commande Google Checkout. Lorsque vous cliquez sur "Facturable", une fenêtre s'ouvre pour vous permettre de facturer la commande MAIS , assurez-vous que "Eligible pour la protection" est vrai avant de facturer la commande. Cela vous assure que le paiement est couvert par la garantie de paiement Google. Vous pouvez réellement le voir dans la section "Vérification du crédit de l'acheteur". section dans Google Checkout.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top