Browse Source

fix payment ack

283
ThomasV 11 years ago
parent
commit
370bdbe855
  1. 1
      gui/qt/__init__.py
  2. 8
      gui/qt/main_window.py
  3. 53
      lib/paymentrequest.py

1
gui/qt/__init__.py

@ -71,6 +71,7 @@ class ElectrumGui:
self.app = QApplication(sys.argv)
self.app.installEventFilter(self.efilter)
init_plugins(self)
self.payment_request = None
def build_tray_menu(self):

8
gui/qt/main_window.py

@ -121,7 +121,6 @@ class ElectrumWindow(QMainWindow):
set_language(config.get('language'))
self.funds_error = False
self.payment_request = None
self.completions = QStringListModel()
self.tabs = tabs = QTabWidget(self)
@ -874,10 +873,11 @@ class ElectrumWindow(QMainWindow):
return
def broadcast_thread():
if self.payment_request:
if self.gui_object.payment_request:
print "sending ack"
refund_address = self.wallet.addresses()[0]
self.payment_request.send_ack(str(tx), refund_address)
self.payment_request = None
self.gui_object.payment_request.send_ack(str(tx), refund_address)
self.gui_object.payment_request = None
# note: BIP 70 recommends not broadcasting the tx to the network and letting the merchant do that
self.tx_broadcast_result = self.wallet.sendtx(tx)
self.emit(SIGNAL('send_tx3'))

53
lib/paymentrequest.py

@ -184,6 +184,7 @@ class PaymentRequest:
if CA_match:
print 'Signed By Trusted CA: ', CA_OU
print "payment url", pay_det.payment_url
return True
@ -191,34 +192,38 @@ class PaymentRequest:
def send_ack(self, raw_tx, refund_addr):
pay_det = self.payment_details
if pay_det.payment_url:
paymnt = paymentrequest_pb2.Payment()
if not pay_det.payment_url:
return
paymnt.merchant_data = pay_det.merchant_data
paymnt.transactions.append(raw_tx)
paymnt = paymentrequest_pb2.Payment()
paymnt.merchant_data = pay_det.merchant_data
paymnt.transactions.append(raw_tx)
ref_out = paymnt.refund_to.add()
ref_out.script = transaction.Transaction.pay_script(refund_addr)
paymnt.memo = "Paid using Electrum"
pm = paymnt.SerializeToString()
ref_out = paymnt.refund_to.add()
ref_out.script = transaction.Transaction.pay_script(refund_addr)
paymnt.memo = "Paid using Electrum"
pm = paymnt.SerializeToString()
payurl = urlparse.urlparse(pay_det.payment_url)
try:
r = requests.post(payurl.geturl(), data=pm, headers=ACK_HEADERS, verify=ca_path)
except requests.exceptions.SSLError:
print "Payment Message/PaymentACK verify Failed"
try:
r = requests.post(payurl.geturl(), data=pm, headers=ACK_HEADERS, verify=False)
except Exception as e:
print "Payment Message/PaymentACK Failed"
print e
return
payurl = urlparse.urlparse(pay_det.payment_url)
try:
r = requests.post(payurl.geturl(), data=pm, headers=ACK_HEADERS, verify=ca_path)
except requests.exceptions.SSLError:
print "Payment Message/PaymentACK verify Failed"
try:
paymntack = paymentrequest_pb2.PaymentACK()
paymntack.ParseFromString(r.content)
print "PaymentACK message received: %s" % paymntack.memo
except Exception:
print "PaymentACK could not be processed. Payment was sent; please manually verify that payment was received."
r = requests.post(payurl.geturl(), data=pm, headers=ACK_HEADERS, verify=False)
except Exception as e:
print "Payment Message/PaymentACK Failed"
print e
return
try:
paymntack = paymentrequest_pb2.PaymentACK()
paymntack.ParseFromString(r.content)
except Exception:
print "PaymentACK could not be processed. Payment was sent; please manually verify that payment was received."
return
print "PaymentACK message received: %s" % paymntack.memo
return paymntack.memo

Loading…
Cancel
Save