Prompt the user to make a payment using Facebook Payments. This wraps the JS SDK function FB.ui({method: "pay", action: "purchaseitem", ...).

When called in the Unity Editor, a stub function is called instead.


public static void FB.Canvas.Pay(
 string product,
 string action = "purchaseitem",
 int quantity = 1,
 int? quantityMin = null,
 int? quantityMax = null,
 string requestId = null,
 string pricepointId = null,
 string testCurrency = null,
 FacebookDelegate<IPayResult> callback = null

Parameter Type Description Default

Should always be




The URL of your


object that the user is looking to purchase. For a full description on how to construct this product object, please see the

Defining Products

guide, and the

Product Object

reference material.


The amount of this item the user is looking to purchase - typically used when implementing a virtual currency purchase.


The minimum quantity of the item the user is able to purchase. This parameter is important when

handling price jumping

to maximize the efficiency of the transaction.


The maximum quantity of the item the user is able to purchase. This parameter is important when

handling price jumping

to maximize the efficiency of the transaction.


The developer defined unique identifier for this transaction, which becomes attached to the payment within the Graph API.

Learn more.

Used to shortcut a mobile payer directly to the mobile purchase flow at a given price point. Full details can be found in the

Optimizing for Mobile Payments



This parameter can be used during debugging and testing your implementation to force the dialog to use a specific currency rather than the current user's preferred currency. This allows you to rapidly prototype your payment experience for different currencies without having to repeatedly change your personal currency preference settings. This parameter is only available for admins, developers and testers associated with the app, in order to minimize the security risk of a malicious JavaScript injection. Provide the 3 letter currency code of the intended forced currency. The list of supported currency codes is

available here
callbackFacebookDelegate <IPayResult&gt;

A delegate which will receive the result of the call, and which you should monitor for errors



Sell two of an item described by the Product Object located at YOUR_PRODUCT_URL, and log the result.

  product: "YOUR_PRODUCT_URL",
  quantity: 2,
  callback: delegate(IPayResult response) {

On success, the response's Text property will be a JSON string like this:

  payment_id: 848929916459082, 
  quantity: "2", 
  status: "completed", 
  signed_request: "7QYHzKqKByA7fjiqJUh2bxFvEdqdvn0n_y1zYiyN6tg.eyJhbGCJxdWFudGl0eSI6IjEiLCJzdGF0dXMiOiJjb21wbGV0ZWQifQ"

A failure's Error property will be a string describing the error.

{"code":400,"body":{"error":{"message":"An active access token must be used to query information about the current user.","type":"OAuthException","code":2500}}}

See the [Payments Dialog documentation](/docs/payments/reference/paydialog) for more details.

Best Practices

Please see the Payments documentation for details on how to get the most from your implementation.