<p>I made something exactly like what you need with sample code to be used with electrum bitcoin client. check it here. <a href="https://bitcointalk.org/index.php?topic=220494.0" rel="nofollow">https://bitcointalk.org/index.php?topic=220494.0</a></p>

<p>I have been busy to develop it further but eventually I will get to it ^_^.</p>

<p>Enjoy and please share feedback.</p>

CC BY-SA 3.0
2013-09-16T15:56:15.540Z
2013-09-16T15:56:15.540Z
Lophie
<p>You could have the customer send a message signed with the Bitcoin address used. This can be done with most Bitcoin clients or with most of the online wallets. This proves they have access to the private key for that address and are the owner. </p>

<p>Where they send the email from is not important as long as you can verify the message. </p>

<p><a href="https://blockchain.info/wallet/features">https://blockchain.info/wallet/features</a></p>

<blockquote>
  <p>Sign Message - Sign a message to prove you own a bitcoin adddress.</p>
</blockquote>

<p><a href="https://bitcoinarmory.com/start-page/what-is-armory/features/">https://bitcoinarmory.com/start-page/what-is-armory/features/</a></p>

<blockquote>
  <p>Message signing with your Bitcoin addresses:   sign messages using the private keys of your bitcoin addresses, that can then be verified by someone else.  For instance, you pay someone 200 BTC for merchandise to be shipped to you.  You send the seller your postal address, but someone intercepts the message and replaces it with their own address!  This is avoidable by using signed messages:  the seller sees the money came from address X, so you send them a signature block, which tells them your postal address, and sign it with address X.  If someone tries to change the address, the signature will become invalid!</p>
</blockquote>

CC BY-SA 3.0
2013-09-12T17:40:59.050Z
2013-09-12T17:40:59.050Z
Skunkhomonstant
<p>The best way is to generate a new bitcoin address for each order.  When the customer wants to check out, you display this address to the customer.  You also store this address in your database, associated with this particular order.  Once you see (by checking the blockchain) that the proper payment amount has been made to this address, and after waiting for however many confirmations you are comfortable with (usually 6) you should ship the product.</p>

<p>If you use an integrated payment system like bitpay, all this should be taken care of for you.</p>

CC BY-SA 3.0
2013-09-10T16:30:05.630Z
What number should they enter to be able to claim their product? The bitcoin address they have paid to?
aninom
CC BY-SA 3.0
2013-09-10T16:47:04.897Z
Sorry I haven't understood your answer. Once I have received the payment, they will come back to the website to claim their product. How do we verify it's he/she who paid? Is it enough that they provide both addresses (sender, receiver)?
aninom
CC BY-SA 3.0
2013-09-10T18:15:03.350Z
You collect all the information you need from them, display a new bitcoin address for them to pay. Once the payment goes through a few confirmations, either ship them the product (if physically shipping something) or send them a download link (if digitally shipping something). I don't see what the issue is or why they need to claim anything.
Nik Bougalis
CC BY-SA 3.0
2013-09-11T14:21:15.120Z
@aninom, does the customer login to your site?  If so, that's all they need to do to claim the product.  Once they login, you will be able to look up their unique pay-to address in your database, then check the blockchain that the address has been paid to (with enough confirmations).  If so, they can get their product.
RentFree
CC BY-SA 3.0
2013-09-12T09:58:01.917Z
Sorry for the confusion, they do not login to the site. I don't have any of their information. I want them to come back to claim the product and then give me the email. (I have changed the question so it is clearer)
aninom
CC BY-SA 3.0
2013-09-12T12:02:03.993Z
aninom, can you have them give you the email before you give them the bitcoin address?  Then RentFree's above scheme will work.  It's equivalent to giving the email later because, no matter what, you're going to have to save a list of which bitcoin address or transaction id belongs to which customer.
Eyal
CC BY-SA 3.0
2013-11-25T16:15:19.963Z
@Eyal, asking for too much information upfront would just reduce the number of potential buyers...
Pacerier
CC BY-SA 3.0
2013-09-10T16:20:47.043Z
2013-09-10T16:20:47.043Z
RentFree
<p>If for some reason you don't want to create multiple bitcoin addresses*, you can use this arrangement:</p>

<ul>
<li>Customer is given your single bitcoin address and a unique invoice number. The invoice number doesn't have to be secret just unique.</li>
<li>Customer is required to pay from a bitcoin address <em>they have the private key for</em>. Until they pay they don't have to tell anyone what this bitcoin address will be.</li>
<li>Once you have received and verified the payment, you record the bitcoin address it came from.</li>
<li>Customer picks up the purchase (or triggers physical delivery) by signing their invoice number with their private key. You verify the signature with their public key and send the delivery.</li>
<li>You can then delete the customer record from the database if you wish <sup>(and if legally permitted)</sup>.</li>
</ul>

<p>You should warn the customer that a purchase will not be delivered without a signed invoice number; and if automatic refunds occur for this service the refund will be to the address it came from - which may not be <em>their</em> specific logical wallet if they used an aggregate service provider or clearing house (the money becomes <a href="http://www.sec.gov/answers/escheat.htm" rel="nofollow">lost</a>).</p>

<p><sub>* Maybe to avoid transaction fees for aggregating payments, or you have a favorite wallet service, or you have a joint account with a company partner.</sub></p>

CC BY-SA 3.0
2013-09-12T10:02:25.720Z
I can create multiple bitcoin addresses, no problem. I will use coinbase that does this automatically, but I don't want them to giveme any details upfront. I want them to come back and claim they paid once the product is ready. Can I do this? Can I ask them some number/id of the transaction and be sure that were them who paid? (I edited the question to make it clearer)
aninom
CC BY-SA 3.0
2013-09-11T01:20:26.573Z
2013-09-11T01:20:26.573Z
LateralFractal
<p>I think I have an alternative that will work, since you are generating a unique address for each transaction.</p>

<p>When you generate the receiving address on your web server, also sign the address using the private key of the address; this generates a hash. You can present the address and the hash to your (potential) customer, letting them know that this hash is the code they will need to claim the product. The full hash is probably not necessary, you could get away with only presenting them with part of the hash (maybe the first 8-12 bytes).</p>

<p>Now the only person who knows the hash is your customer (assuming a secure web connection, no MITM, etc). It's not something that can be derived by anyone else based on what is in the blockchain since only you have the private key, and your customer can't do anything malicious with the hash.</p>

<p>You could do one of two things -- store the address and hash on your server (for easy lookup), or not (since there is no knowing whether they went through with a transaction or not, and you could end up with a database full of never-to-be-used hashes).</p>

<p>When the customer comes to claim their goods, they provide the address and the hash. Your server once again signs the address using the address's private key, and compares that hash against the claim code provided by the customer (or if you opted to store the addr/hash pairs you just do a lookup). If they match, you deliver their product.</p>

<p>I'm not sure if there are any gaps in this process; any feedback would be appreciated.</p>

CC BY-SA 3.0
2014-01-24T21:55:02.307Z
The benefit of this process over the other answers above is that it doesn't require the customer to know anything about signing messages with their Bitcoin client. It sounds like you are trying to make this as simple for the customer as possible.
Wolske
CC BY-SA 3.0
2014-01-24T21:57:16.787Z
I just also read that you are using Coinbase to generate the addresses; I originally thought you might have had a web server of your own that was generating addresses and could do the signing. I'm not sure how server-side signing would work with Coinbase, or if their APIs support it.
Wolske
CC BY-SA 3.0
2014-01-24T21:49:26.503Z
2014-01-24T21:49:26.503Z
Wolske
<p>As I understood you are doing this without any login system, what you can do is generate a random alpha numeric code along with the address store this code with the address in database and prompt it to the customer. Also prompt a message that this is the unique identification number required to later claim their product. Rest process goes same like 6 confirmations etc.</p>

CC BY-SA 3.0
2014-01-24T22:06:52.897Z
2014-01-24T22:06:52.897Z
Khan Shahrukh
<p>I have a website and I am considering supporting bitcoins, but I would like to do this without asking the users to log in nor give me their email or details before buying.</p>

<p>Is there a way to accept bitcoin payments and verify the identity of the people who paid without asking for any other information?</p>

<p>I would like the buyers to claim their product after they pay, using the transaction id, the confirmation number, the address... or something like this, so I do not have to ask for any other information before they buy, but I can be sure that I deliver the product to the right person.</p>

<p>That is, you can pay directly using my btc address (that will be different for each transaction) and you do not have to enter anything else. 
After the transaction is confirmed, you can come back to the website and you can claim the product entering a "code". (Only then you'll be asked for the email or more details).</p>

<p>Can I use the pair of transaction addresses as this code? Is this secret or other people will be able to claim they paid?</p>

<p>Thank you very much!!</p>

CC BY-SA 3.0
2013-09-11T01:28:36.903Z
I suggest making the question in the second sentence the question in the title. It can better reflect the question for future searches. :-)
LateralFractal
<transactions><websites><ecommerce>
Is there a way to accept bitcoin payments and verify the identity of the people who paid without asking for any other information?
aninom
# Is there a way to accept bitcoin payments and verify the identity of the people who paid without asking for any other information?

(Asked by: username_0 on 2013-09-10)

I have a website and I am considering supporting bitcoins, but I would like to do this without asking the users to log in nor give me their email or details before buying.

Is there a way to accept bitcoin payments and verify the identity of the people who paid without asking for any other information?

I would like the buyers to claim their product after they pay, using the transaction id, the confirmation number, the address... or something like this, so I do not have to ask for any other information before they buy, but I can be sure that I deliver the product to the right person.

That is, you can pay directly using my btc address (that will be different for each transaction) and you do not have to enter anything else.
After the transaction is confirmed, you can come back to the website and you can claim the product entering a "code". (Only then you'll be asked for the email or more details).

Can I use the pair of transaction addresses as this code? Is this secret or other people will be able to claim they paid?

Thank you very much!!

**Tags:** transactions, websites, ecommerce

> **Comments:**
> **username_1**: I suggest making the question in the second sentence the question in the title. It can better reflect the question for future searches. :-)  

---

## 6 answers

### Answer by username_2 on 2013-09-16. Score: 2 | Accepted answer

I made something exactly like what you need with sample code to be used with electrum bitcoin client. check it here. <https://bitcointalk.org/index.php?topic=220494.0>

I have been busy to develop it further but eventually I will get to it ^\_^.

Enjoy and please share feedback.


---

### Answer by username_3 on 2013-09-12. Score: 5

You could have the customer send a message signed with the Bitcoin address used. This can be done with most Bitcoin clients or with most of the online wallets. This proves they have access to the private key for that address and are the owner.

Where they send the email from is not important as long as you can verify the message.

<https://blockchain.info/wallet/features>

> Sign Message - Sign a message to prove you own a bitcoin adddress.

<https://bitcoinarmory.com/start-page/what-is-armory/features/>

> Message signing with your Bitcoin addresses: sign messages using the private keys of your bitcoin addresses, that can then be verified by someone else. For instance, you pay someone 200 BTC for merchandise to be shipped to you. You send the seller your postal address, but someone intercepts the message and replaces it with their own address! This is avoidable by using signed messages: the seller sees the money came from address X, so you send them a signature block, which tells them your postal address, and sign it with address X. If someone tries to change the address, the signature will become invalid!


---

### Answer by username_4 on 2013-09-10. Score: 3

The best way is to generate a new bitcoin address for each order. When the customer wants to check out, you display this address to the customer. You also store this address in your database, associated with this particular order. Once you see (by checking the blockchain) that the proper payment amount has been made to this address, and after waiting for however many confirmations you are comfortable with (usually 6) you should ship the product.

If you use an integrated payment system like bitpay, all this should be taken care of for you.

> **Comments:**
> **username_0**: What number should they enter to be able to claim their product? The bitcoin address they have paid to?  
> **username_0**: Sorry I haven't understood your answer. Once I have received the payment, they will come back to the website to claim their product. How do we verify it's he/she who paid? Is it enough that they provide both addresses (sender, receiver)?  
> **username_5**: You collect all the information you need from them, display a new bitcoin address for them to pay. Once the payment goes through a few confirmations, either ship them the product (if physically shipping something) or send them a download link (if digitally shipping something). I don't see what the issue is or why they need to claim anything.  
> **username_4**: @username_0, does the customer login to your site?  If so, that's all they need to do to claim the product.  Once they login, you will be able to look up their unique pay-to address in your database, then check the blockchain that the address has been paid to (with enough confirmations).  If so, they can get their product.  
> **username_0**: Sorry for the confusion, they do not login to the site. I don't have any of their information. I want them to come back to claim the product and then give me the email. (I have changed the question so it is clearer)  
> **username_6**: username_0, can you have them give you the email before you give them the bitcoin address?  Then username_4's above scheme will work.  It's equivalent to giving the email later because, no matter what, you're going to have to save a list of which bitcoin address or transaction id belongs to which customer.  
> **username_7**: @username_6, asking for too much information upfront would just reduce the number of potential buyers...  

---

### Answer by username_1 on 2013-09-11. Score: 2

If for some reason you don't want to create multiple bitcoin addresses\*, you can use this arrangement:

* Customer is given your single bitcoin address and a unique invoice number. The invoice number doesn't have to be secret just unique.
* Customer is required to pay from a bitcoin address *they have the private key for*. Until they pay they don't have to tell anyone what this bitcoin address will be.
* Once you have received and verified the payment, you record the bitcoin address it came from.
* Customer picks up the purchase (or triggers physical delivery) by signing their invoice number with their private key. You verify the signature with their public key and send the delivery.
* You can then delete the customer record from the database if you wish (and if legally permitted).

You should warn the customer that a purchase will not be delivered without a signed invoice number; and if automatic refunds occur for this service the refund will be to the address it came from - which may not be *their* specific logical wallet if they used an aggregate service provider or clearing house (the money becomes [lost](http://www.sec.gov/answers/escheat.htm)).

\* Maybe to avoid transaction fees for aggregating payments, or you have a favorite wallet service, or you have a joint account with a company partner.

> **Comments:**
> **username_0**: I can create multiple bitcoin addresses, no problem. I will use coinbase that does this automatically, but I don't want them to giveme any details upfront. I want them to come back and claim they paid once the product is ready. Can I do this? Can I ask them some number/id of the transaction and be sure that were them who paid? (I edited the question to make it clearer)  

---

### Answer by username_8 on 2014-01-24. Score: 0

I think I have an alternative that will work, since you are generating a unique address for each transaction.

When you generate the receiving address on your web server, also sign the address using the private key of the address; this generates a hash. You can present the address and the hash to your (potential) customer, letting them know that this hash is the code they will need to claim the product. The full hash is probably not necessary, you could get away with only presenting them with part of the hash (maybe the first 8-12 bytes).

Now the only person who knows the hash is your customer (assuming a secure web connection, no MITM, etc). It's not something that can be derived by anyone else based on what is in the blockchain since only you have the private key, and your customer can't do anything malicious with the hash.

You could do one of two things -- store the address and hash on your server (for easy lookup), or not (since there is no knowing whether they went through with a transaction or not, and you could end up with a database full of never-to-be-used hashes).

When the customer comes to claim their goods, they provide the address and the hash. Your server once again signs the address using the address's private key, and compares that hash against the claim code provided by the customer (or if you opted to store the addr/hash pairs you just do a lookup). If they match, you deliver their product.

I'm not sure if there are any gaps in this process; any feedback would be appreciated.

> **Comments:**
> **username_8**: The benefit of this process over the other answers above is that it doesn't require the customer to know anything about signing messages with their Bitcoin client. It sounds like you are trying to make this as simple for the customer as possible.  
> **username_8**: I just also read that you are using Coinbase to generate the addresses; I originally thought you might have had a web server of your own that was generating addresses and could do the signing. I'm not sure how server-side signing would work with Coinbase, or if their APIs support it.  

---

### Answer by username_9 on 2014-01-24. Score: 0

As I understood you are doing this without any login system, what you can do is generate a random alpha numeric code along with the address store this code with the address in database and prompt it to the customer. Also prompt a message that this is the unique identification number required to later claim their product. Rest process goes same like 6 confirmations etc.


---

