Ric*_*nop 1 php mysql curl payment-gateway google-checkout
我打算在社交网站上集成Google Checkout支付系统.这个想法是成员可以为真钱购买"代币"(这是一种网站货币)然后他们可以购买访问网站上的一些额外内容等.
我想要做的是创建一个Google Checkout按钮,将会员带到结账页面,用他的信用卡或借记卡付款.我想要的是Google Checkout通知我的服务器是否购买了令牌是否成功(如果信用卡/借记卡已被收费)所以我可以更新本地数据库.
该网站使用PHP/MySQL编码.
我从这里下载了示例PHP代码:code.google.com/p/google-checkout-php-sample-code/wiki/Documentation
我知道如何创建Google Checkout按钮,我还在我的服务器上放置了responsehandlerdemo.php文件.这是Google Checkout应该发送回复的文件(当然我在Google商家帐户中设置了该文件的路径).
现在在响应处理程序文件中有一个包含多个case语句的switch块.哪一个意味着付款成功,我可以将令牌添加到本地数据库中的成员帐户?
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;
Run Code Online (Sandbox Code Playgroud)
}
我猜那个案子'充电'就是那个,我是对的吗?
第二个问题,我是否需要SSL证书才能收到Google Checkout的回复?根据这个,我做:groups.google.com/group/google-checkout-api-php/browse_thread/thread/10ce55177281c2b0
但我不会在官方文档中的任何地方看到它.
谢谢.
我在6个月前将其整合到我的网站中.它的体积非常小,但到目前为止效果很好.
你应该担心的第一件事是'充电'.这意味着信用卡已被批准用于交易,但在您采取行动之前,它实际上不会收取资金.要发送费用请求,只需取消注释CHARGEABLE下的两行即可.您可以更改设置,使其在"设置">"偏好设置"中自动为卡充电,但您也可以取消注释2行并保持选项处于打开状态.
请注意,您可能希望等待"风险信息通知"并确定在批准收费之前是否通过了风险检查($ data [$ root] ['risk-information'] ['qualified-for-protection'] ['值']).虽然,您似乎在谈论数字商品,退款的可能性对您来说可能并不重要.
在某些时候,我确信您还应该检查该请求是否有足够的信息,以便您在收取资金之前将资金链接到某个帐户,但也许这只是我的偏执狂.
我使用的另一个州是"费用金额通知".完全可能有一种方法可以使用'CHARGED',但我不认为'CHARGED'提供实际收费的金额.($ amount_charged = $ data [$ root] ['total-charge-amount'] ['VALUE'];)
对于SSL,如果您检查输入回调URL的位置,则会指出以下内容:"指定Google的URL以通知您新订单和订单状态的更改.您必须提供运行128-的服务器的URL位SSLv3或TLS"
回答你的评论:我在"new_order_notification"下执行此操作,不确定是否可以在其他地方执行此操作.
$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
}
| 归档时间: |
|
| 查看次数: |
1961 次 |
| 最近记录: |