Facebook の支払いダイアログにはクレジットのみが表示されます。クレジットの購入をクリックすると、次のダイアログに移動して支払いオプションを尋ねられますが、購入が成功したと表示されます。私が何をしているのかわかりませんが、すべてを試してみましたが、うまくいきません。
ここに私のJavaScript関数があります
function buy_tokens(p){
FB.init({appId: "myappid", status: true, cookie: true});
var obj = {
method: 'pay',
action: 'buy_item',
order_info: {'item_id': 'tokens', 'price':p},
dev_purchase_params: {'oscif': true}
};
//FB.ui(obj, js_callback);
FB.ui(obj, function(paydata) {
// response back
});
}
ここに私のcallback.phpがあります
<?php
$facebook = new Facebook(array(
'appId' => APP_ID,
'secret' => SECRET,
'cookie' => true,
));
$api_key = 'appid';
$secret = 'app secret';
// prepare the return data array
$data = array('content' => array());
//parse signed data
$request = parse_signed_request($_REQUEST['signed_request'], $secret);
if ($request == null) {
// handle an unauthenticated request here
}
$payload = $request['credits'];
// retrieve all params passed in
$func = $_REQUEST['method'];
$order_id = $payload['order_id'];
function parse_signed_request($signed_request, $secret) {
list($encoded_sig, $payload) = explode('.', $signed_request, 2);
// decode the data
$sig = base64_url_decode($encoded_sig);
$data = json_decode(base64_url_decode($payload), true);
if (strtoupper($data['algorithm']) !== 'HMAC-SHA256') {
error_log('Unknown algorithm. Expected HMAC-SHA256');
return null;
}
// check sig
$expected_sig = hash_hmac('sha256', $payload, $secret, $raw = true);
if ($sig !== $expected_sig) {
error_log('Bad Signed JSON signature!');
return null;
}
return $data;
}
function base64_url_decode($input) {
return base64_decode(strtr($input, '-_', '+/'));
}
if ($func == 'payments_status_update') {
$status = $payload['status'];
// write your logic here, determine the state you wanna move to
if ($status == 'placed') {
$next_state = 'settled';
$data['content']['status'] = $next_state;
}
// compose returning data array_change_key_case
$data['content']['order_id'] = $order_id;
} else if ($func == 'payments_get_items') {
// remove escape characters
$order_info = stripcslashes($payload['order_info']);
$item_info = json_decode($order_info, true);
//Per the credits api documentation,
//you should pass in an item reference
// and then query your internal DB for the proper
//information. Then set the item
//information here to be returned to facebook
//then shown to the user for confirmation.
if($item_info['price']=='0.69'){
$tokens = 150000;
}elseif($item_info['price']=='1.49'){
$tokens = 350000;
}elseif($item_info['price']=='2.49'){
$tokens = 600000;
}elseif($item_info['price']=='3.99'){
$tokens = 1000000;
}
$fb = $facebook->api('/me/?fields=currency');
$credit = round($item_info['price']*$fb[currency] ['currency_exchange_inverse']*$fb[currency]['currency_offset']*$fb[currency] ['currency_exchange']);
// $symbol = array('GBP'=>'£','EUR'=>'€','USD'=>'$');
if ($item_info['item_id'] != "") {
$item['title'] = $tokens.' Tokens ';
$item['price'] = $credit;
$item['description']= 'You will get '.$tokens.' Tokens';
$item['image_url']='url';
$item['product_url']='url';
}
//for url fields, if not prefixed by http:,
//prefix them
$url_key = array('product_url', 'image_url');
foreach ($url_key as $key) {
if (substr($item[$key], 0, 7) != 'http://') {
$item[$key] = 'http://'.$item[$key];
}
}
$data['content'] = array($item);
}
// required by api_fetch_response()
$data['method'] = $func;
echo json_encode($data);
?>