def post(self): # 返回参数 #<xml> # <appid><![CDATA[wxaa328c83d3132bfb]]></appid>\n # <attach><![CDATA[Aplan]]></attach>\n # <bank_type><![CDATA[CFT]]></bank_type>\n # <cash_fee><![CDATA[1]]></cash_fee>\n # <fee_type><![CDATA[CNY]]></fee_type>\n # <is_subscribe><![CDATA[Y]]></is_subscribe>\n # <mch_id><![CDATA[1340430801]]></mch_id>\n # <nonce_str><![CDATA[jOhHjqDfx9VQGmU]]></nonce_str>\n # <openid><![CDATA[oy0Kxt7zNpZFEldQmHwFF-RSLNV0]]></openid>\n # <out_trade_no><![CDATA[e358738e30fe11e69a7e00163e007b3e]]></out_trade_no>\n # <result_code><![CDATA[SUCCESS]]></result_code>\n # <return_code><![CDATA[SUCCESS]]></return_code>\n # <sign><![CDATA[6291D73149D05F09D18C432E986C4DEB]]></sign>\n # <time_end><![CDATA[20160613083651]]></time_end>\n # <total_fee>1</total_fee>\n # <trade_type><![CDATA[JSAPI]]></trade_type>\n # <transaction_id><![CDATA[4007652001201606137183943151]]></transaction_id>\n #</xml> _xml = self.request.body logging.info("got return_body %r", _xml) _pay_return = parseWxPayReturn(_xml) logging.info("got result_code %r", _pay_return['result_code']) logging.info("got total_fee %r", _pay_return['total_fee']) logging.info("got time_end %r", _pay_return['time_end']) logging.info("got transaction_id %r", _pay_return['transaction_id']) logging.info("got out_trade_no %r", _pay_return['out_trade_no']) _order_id = _pay_return['out_trade_no'] _result_code = _pay_return['result_code'] if _result_code == 'SUCCESS': # 查询过去是否填报,有则跳过此步骤。主要是防止用户操作回退键,重新回到此页面 _old_order = voucher_order_dao.voucher_order_dao().query(_order_id) if _old_order['status'] > 30: return else: _timestamp = int(time.time()) json = { '_id': _order_id, 'last_update_time': _timestamp, "status": ORDER_STATUS_WECHAT_PAY_SUCCESS, 'transaction_id': _pay_return['transaction_id'], 'payed_total_fee': _pay_return['total_fee'] } voucher_order_dao.voucher_order_dao().update(json) else: _timestamp = (int)(time.time()) json = { '_id': _order_id, 'last_update_time': _timestamp, "status": ORDER_STATUS_WECHAT_PAY_FAILED } voucher_order_dao.voucher_order_dao().update(json)
def get(self, vendor_id): logging.info("got vendor_id %r in uri", vendor_id) # _session_ticket = self.get_secure_cookie("session_ticket") iBefore = 0 sBefore = self.get_argument("before", "") #格式 2016-06-01 22:36 if sBefore != "": iBefore = float(datetime_timestamp(sBefore)) else: iBefore = time.time() _array = voucher_order_dao.voucher_order_dao( ).query_pagination_by_vendor(vendor_id, iBefore, PAGE_SIZE_LIMIT) for _voucher_order in _array: _voucher_order['voucher_price'] = float( _voucher_order['voucher_price']) / 100 _voucher_order['voucher_amount'] = float( _voucher_order['voucher_amount']) / 100 _voucher_order['create_time'] = timestamp_datetime( _voucher_order['create_time']) _json = json_encode(_array) logging.info("got _json %r", _json) self.write(JSON.dumps(_json, default=json_util.default)) self.finish()
def get(self, vendor_id): logging.info("got vendor_id %r in uri", vendor_id) access_token = self.get_access_token() ops = self.get_ops_info() before = time.time() _array = voucher_order_dao.voucher_order_dao( ).query_pagination_by_vendor(vendor_id, before, PAGE_SIZE_LIMIT) for _voucher_order in _array: _voucher_order['voucher_price'] = float( _voucher_order['voucher_price']) / 100 _voucher_order['voucher_amount'] = float( _voucher_order['voucher_amount']) / 100 _voucher_order['create_time'] = timestamp_datetime( _voucher_order['create_time']) counter = self.get_counter(vendor_id) self.render('vendor/voucher-orders.html', vendor_id=vendor_id, ops=ops, API_DOMAIN=API_DOMAIN, access_token=access_token, counter=counter, voucher_orders=_array)
def get(self, vendor_id, voucher_order_id): logging.info("got vendor_id %r in uri", vendor_id) logging.info("got voucher_order_id %r in uri", voucher_order_id) _timestamp = time.time() json = { "_id": voucher_order_id, "last_update_time": _timestamp, "review": True } voucher_order_dao.voucher_order_dao().update(json) num = voucher_order_dao.voucher_order_dao().count_not_review_by_vendor( vendor_id) budge_num_dao.budge_num_dao().update({ "_id": vendor_id, "voucher_order": num }) self.finish("ok")
def post(self): vendor_id = self.get_argument("vendor_id", "") logging.info("got vendor_id %r", vendor_id) voucher_id = self.get_argument("voucher_id", "") account_id = self.get_secure_cookie("account_id") _timestamp = time.time() # 一分钟内不能创建第二个订单, # 防止用户点击回退按钮,产生第二个订单 _old_orders = voucher_order_dao.voucher_order_dao().query_by_account( voucher_id, account_id) # if len(_old_orders) > 0: # for _old_order in _old_orders: # if (_timestamp - _old_order['create_time']) < 60: # return # # 订单申报数目 # _applicant_num = self.get_argument("applicant_num", 1) # 转换成元 _voucher = voucher_pay_dao.voucher_pay_dao().query_not_safe(voucher_id) _amount = _voucher['amount'] _price = _voucher['price'] _voucher_id = _voucher['_id'] _create_time = _voucher['create_time'] _expired_time = _voucher['expired_time'] _qrcode_url = _voucher['qrcode_url'] _customer = vendor_member_dao.vendor_member_dao().query_not_safe( vendor_id, account_id) try: _customer['account_nickname'] except: _customer['account_nickname'] = '' try: _customer['account_avatar'] except: _customer['account_avatar'] = '' _nickname = _customer['account_nickname'] _avatar = _customer['account_avatar'] # 创建一个代金券订单 _status = ORDER_STATUS_BF_INIT if _price == 0: _status = ORDER_STATUS_WECHAT_PAY_SUCCESS _order_id = str(uuid.uuid1()).replace('-', '') _timestamp = time.time() # 创建订单索引 order_index = { "_id": _order_id, "order_tyoe": "buy_voucher", "club_id": vendor_id, "item_type": "voucher", "item_id": _voucher_id, "item_name": _title, "distributor_type": "club", "distributor_id": guest_club_id, "create_time": _timestamp, "pay_type": "wxpay", "pay_status": _status, "total_amount": _amount, #已经转换为分,注意转为数值 } self.create_order(order_index) _order = { "_id": _order_id, "vendor_id": vendor_id, "account_id": account_id, "account_avatar": _avatar, "account_nickname": _nickname, "voucher_id": _voucher_id, "voucher_price": _price, "voucher_amount": _amount, "pay_type": "wxpay", "applicant_num": 1, "create_time": _timestamp, "last_update_time": _timestamp, 'status': _status, 'review': False } # status=99, 微信返回的支付状态 voucher_order_dao.voucher_order_dao().create(_order) num = voucher_order_dao.voucher_order_dao().count_not_review_by_vendor( vendor_id) budge_num_dao.budge_num_dao().update({ "_id": vendor_id, "voucher_order": num }) #创建微信订单 _total_amount = int(_voucher['price']) _timestamp = (int)(time.time()) if _total_amount != 0: # wechat 统一下单 # _openid = self.get_secure_cookie("wx_openid") # logging.info("got _openid %r", _openid) # 从comm中统一取 myinfo = self.get_myinfo_login() _openid = myinfo['login'] _store_id = 'Aplan' logging.info("got _store_id %r", _store_id) _product_description = "voucher" logging.info("got _product_description %r", _product_description) wx_app_info = vendor_wx_dao.vendor_wx_dao().query(vendor_id) wx_app_id = wx_app_info['wx_app_id'] logging.info("got wx_app_id %r in uri", wx_app_id) wx_mch_key = wx_app_info['wx_mch_key'] wx_mch_id = wx_app_info['wx_mch_id'] wx_notify_domain = wx_app_info['wx_notify_domain'] key = wx_mch_key nonceA = getNonceStr() logging.info("got nonceA %r", nonceA) #_ip = self.request.remote_ip _remote_ip = self.request.headers['X-Real-Ip'] logging.info("got _remote_ip %r", _remote_ip) total_fee = str(_total_amount) logging.info("got total_fee %r", total_fee) notify_url = wx_notify_domain + '/bf/wx/voucher-orders/notify' logging.info("got notify_url %r", notify_url) signA = getOrderSign(_remote_ip, notify_url, wx_app_id, wx_mch_id, nonceA, _openid, key, _store_id, _order_id, _product_description, total_fee) logging.info("got signA %r", signA) _xml = '<xml>' \ + '<appid>' + wx_app_id + '</appid>' \ + '<attach>' + _store_id + '</attach>' \ + '<body>' + _product_description + '</body>' \ + '<mch_id>' + wx_mch_id + '</mch_id>' \ + '<nonce_str>' + nonceA + '</nonce_str>' \ + '<notify_url>' + notify_url + '</notify_url>' \ + '<openid>' + _openid + '</openid>' \ + '<out_trade_no>' + _order_id + '</out_trade_no>' \ + '<spbill_create_ip>' + _remote_ip + '</spbill_create_ip>' \ + '<total_fee>' + total_fee + '</total_fee>' \ + '<trade_type>JSAPI</trade_type>' \ + '<sign>' + signA + '</sign>' \ + '</xml>' logging.info("got xml-------- %r", _xml) url = "https://api.mch.weixin.qq.com/pay/unifiedorder" http_client = HTTPClient() response = http_client.fetch(url, method="POST", body=_xml) logging.info("got response %r", response.body) _order_return = parseWxOrderReturn(response.body) logging.info("got _timestamp %r", str(_timestamp)) try: prepayId = _order_return['prepay_id'] except: _order_return['prepay_id'] = '' prepayId = '' logging.info("got prepayId %r", prepayId) try: nonceB = _order_return['nonce_str'] except: _order_return['nonce_str'] = '' nonceB = '' signB = getPaySign(_timestamp, wx_app_id, nonceB, prepayId, key) logging.info("got signB %r", signB) _order_return['pay_sign'] = signB _order_return['timestamp'] = _timestamp _order_return['app_id'] = wx_app_id _order_return['timestamp'] = _timestamp #_order_return['return_msg'] = 'OK' if (_order_return['return_msg'] == 'OK'): json = { '_id': _order_id, 'prepay_id': prepayId, 'status': ORDER_STATUS_WECHAT_UNIFIED_SUCCESS } else: json = { '_id': _order_id, 'prepay_id': prepayId, 'status': ORDER_STATUS_WECHAT_UNIFIED_FAILED } voucher_order_dao.voucher_order_dao().update(json) _voucher['amount'] = float(_voucher['amount']) / 100 _voucher['price'] = float(_voucher['price']) / 100 self.render('wx/voucher-pay-confirm.html', vendor_id=vendor_id, order_return=_order_return, voucher=_voucher, order=_order)
def get(self, vendor_id, voucher_id): logging.info("got vendor_id %r in uri", vendor_id) logging.info("got voucher_id %r in uri", voucher_id) ops = self.get_ops_info() _voucher = voucher_pay_dao.voucher_pay_dao().query_not_safe(voucher_id) # 转换成元 _amount = _voucher['amount'] _price = _voucher['price'] _voucher_id = _voucher['_id'] _id = str(uuid.uuid1()).replace('-', '') _create_time = _voucher['create_time'] _expired_time = _voucher['expired_time'] _qrcode_url = _voucher['qrcode_url'] # account_id应由微信端传入 account_id = 'feece1648fa6484086700a83b0e8e540' _customer = vendor_member_dao.vendor_member_dao().query_not_safe( vendor_id, account_id) try: _customer['account_nickname'] except: _customer['account_nickname'] = '' try: _customer['account_avatar'] except: _customer['account_avatar'] = '' _nickname = _customer['account_nickname'] _avatar = _customer['account_avatar'] # 创建一个代金券订单 _timestamp = time.time() json = { "_id": _id, "vendor_id": vendor_id, "account_id": account_id, "account_avatar": _avatar, "account_nickname": _nickname, "voucher_id": _voucher_id, "voucher_price": _price, "voucher_amount": _amount, "pay_type": "wxpay", "applicant_num": 1, "create_time": _timestamp, "last_update_time": _timestamp, 'status': 1, 'review': False } voucher_order_dao.voucher_order_dao().create(json) # 每分配一个有偿代金券则生成一个普通代金券记录,方便个人中心查询 _timestamp = time.time() json = { "_id": _id, "vendor_id": vendor_id, "qrcode_url": _qrcode_url, "create_time": _create_time, "last_update_time": _timestamp, "amount": _amount, "expired_time": _expired_time, "price": _price, 'status': 1, "account_id": account_id } # status=1, 已分配,未使用 voucher_dao.voucher_dao().create(json) # 更新用户代金券 _customer_profile = vendor_member_dao.vendor_member_dao( ).query_not_safe(vendor_id, account_id) try: _customer_profile['vouchers'] except: _customer_profile['vouchers'] = 0 _vouchers_num = int(_customer_profile['vouchers']) + int(_amount) _json = { 'vendor_id': vendor_id, 'account_id': account_id, 'last_update_time': _timestamp, 'vouchers': _vouchers_num } vendor_member_dao.vendor_member_dao().update(_json) num = voucher_order_dao.voucher_order_dao().count_not_review_by_vendor( vendor_id) budge_num_dao.budge_num_dao().update({ "_id": vendor_id, "voucher_order": num }) counter = self.get_counter(vendor_id) self.redirect('/vendors/' + vendor_id + '/vouchers?status=0')