There is a custom
parameter you can pass in when creating the button. At first this doesn't seem useful because if it's hard-coded into the button it's the same for every user. But if you combine this with the fact that button attributes can be overridden in the HTML (as described here in the "Customizing the Embed HTML" section), then suddenly your site can include a unique value for every customer that will propagate from the order button to the callback message.
Here is what Coinbase generates for you:
<a class="coinbase-button"
data-code="coinbase-generated-code"
href="https://coinbase.com/checkouts/coinbase-generated-code">Pay With Bitcoin</a>
<script src="https://coinbase.com/assets/button.js" type="text/javascript"></script>
You can modify it slightly to include a data-custom
HTML attribute. This value will propagate through the order all the way to the callback JSON message. By setting its value to your customer ID (or any other unique value), you'll be able to associate the callback with your customer when it comes in from Coinbase.
<a class="coinbase-button"
data-code="coinbase-generated-code"
data-custom="YOUR-CUSTOMER-ID-HERE"
href="https://coinbase.com/checkouts/coinbase-generated-code">Pay With Bitcoin</a>
<script src="https://coinbase.com/assets/button.js" type="text/javascript"></script>