diff --git a/gui/qt/__init__.py b/gui/qt/__init__.py index 818400e6..07a449c5 100644 --- a/gui/qt/__init__.py +++ b/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): diff --git a/gui/qt/main_window.py b/gui/qt/main_window.py index f7b62fcc..3aca6827 100644 --- a/gui/qt/main_window.py +++ b/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')) diff --git a/lib/paymentrequest.py b/lib/paymentrequest.py index a9f076ca..a565c3f8 100644 --- a/lib/paymentrequest.py +++ b/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) + 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=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 - 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