예제 #1
0
    def get(self):
        order_id = self.get_cookie("order_id")
        order = self.session.query(models.Order).filter_by(id=order_id).first()
        # print("[WeixinPay]Start Pay order.num:",order.num)
        if not order:
            return self.send_fail('order not found')
        totalPrice = order.new_totalprice
        wxPrice = int(totalPrice * 100)

        # print("[WeixinPay]full_url:",self.request.full_url())
        path_url = self.request.full_url()

        shop_id = order.shop_id
        shop = self.session.query(models.Shop).filter_by(id=shop_id).first()
        if not shop:
            return self.send_fail('shop not found')
        shop_name = shop.shop_name
        shop_code = shop.shop_code
        shop_phone = shop.shop_phone
        jsApi = JsApi_pub()

        # order detail
        create_date = order.create_date
        receiver = order.receiver
        phone = order.phone
        address = order.address_text
        send_time = order.send_time
        remark = order.remark
        pay_type = order.pay_type
        online_type = order.online_type
        status = order.status
        order_num = order.num

        charge_types = self.session.query(models.ChargeType).filter(
            models.ChargeType.id.in_(eval(order.fruits).keys())).all()
        if order.type == 2:
            freight = order.shop.config.freight_on_time
        else:
            freight = order.shop.config.freight_now
        staff_id = order.SH2_id
        staff_info = self.session.query(
            models.Accountinfo).filter_by(id=staff_id).first()
        if staff_info is not None:
            sender_phone = staff_info.phone
            sender_img = staff_info.headimgurl_small
        else:
            sender_phone = None
            sender_img = None
        goods = []
        f_d = eval(order.fruits)
        for f in f_d:
            goods.append([
                f_d[f].get('fruit_name'), f_d[f].get('charge'),
                f_d[f].get('num')
            ])

        qr_url = ""
        if not self.is_wexin_browser():
            qr_url = self._qrwxpay(shop_name)
            # print("[WeixinPay]qr_url:",qr_url)
            return self.render('customer/online-qrwxpay.html',qr_url = qr_url,totalPrice = totalPrice,\
            shop_name = shop_name,create_date=create_date,receiver=receiver,phone=phone,address=address,\
            send_time = send_time,remark=remark,pay_type=pay_type,online_type=online_type,freight = freight,\
            goods = goods,sender_phone=sender_phone,sender_img=sender_img,charge_types=charge_types,\
            order=order,shop_code=shop_code,shop_phone = shop_phone)

        path = APP_OAUTH_CALLBACK_URL + self.reverse_url('onlineWxPay')
        code = self.args.get('code', None)
        if len(code) is 2:
            url = jsApi.createOauthUrlForCode(path)
            # print("[WeixinPay]code url:",url)
            return self.redirect(url)
        else:
            jsApi.setCode(code)
            openid = jsApi.getOpenid()
            # print("[WeixinPay]current code:",code)
            if not openid:
                print("[WeixinPay]OpenID not found")
            unifiedOrder = UnifiedOrder_pub()
            # totalPrice = self.args['totalPrice']
            # totalPrice =float( self.get_cookie('money'))
            # print("[WeixinPay]totalPrice:",totalPrice)
            shop_name = re.compile(u'[\U00010000-\U0010ffff]').sub(
                u'', shop_name)
            unifiedOrder.setParameter("body",
                                      shop_name + '-订单号-' + str(order_num))
            url = APP_OAUTH_CALLBACK_URL + '/customer/onlinewxpay'
            unifiedOrder.setParameter("notify_url", url)
            unifiedOrder.setParameter("openid", openid)
            unifiedOrder.setParameter("out_trade_no", order_num)
            # orderPriceSplite = (order.price) * 100
            wxPrice = int(totalPrice * 100)
            # print("[WeixinPay]wxPrice:",wxPrice)
            unifiedOrder.setParameter('total_fee', wxPrice)
            unifiedOrder.setParameter('trade_type', "JSAPI")
            prepay_id = unifiedOrder.getPrepayId()
            # print("[WeixinPay]prepay_id:",prepay_id)
            if not prepay_id:
                return self.send_fail("微信支付失败,请稍后再试!")
            jsApi.setPrepayId(prepay_id)
            renderPayParams = jsApi.getParameters()
            # print("[WeixinPay]renderPayParams:",renderPayParams)
            noncestr = "".join(
                random.sample('zyxwvutsrqponmlkjihgfedcba0123456789', 10))
            timestamp = datetime.datetime.now().timestamp()
            wxappid = 'wx0ed17cdc9020a96e'
            signature = self.signature(noncestr, timestamp, path_url)

            qr_url = self._qrwxpay(shop_name)
        return self.render("fruitzone/paywx.html",qr_url = qr_url ,renderPayParams = renderPayParams,wxappid = wxappid,\
         noncestr = noncestr ,timestamp = timestamp,signature = signature,totalPrice = totalPrice,\
         shop_name = shop_name,create_date=create_date,receiver=receiver,phone=phone,address=address,\
         send_time = send_time,remark=remark,pay_type=pay_type,online_type=online_type,freight = freight,\
         goods = goods,sender_phone=sender_phone,sender_img=sender_img,charge_types=charge_types,\
         order=order,shop_code = shop_code,shop_phone = shop_phone)
예제 #2
0
	def get(self):
		order_id = self.get_cookie("order_id")
		order = self.session.query(models.Order).filter_by(id = order_id).first()
		# print("[WeixinPay]Start Pay order.num:",order.num)
		if not order:
			return self.send_fail('order not found')
		totalPrice = order.new_totalprice
		wxPrice =int(totalPrice * 100)

		# print("[WeixinPay]full_url:",self.request.full_url())
		path_url = self.request.full_url()

		shop_id   = order.shop_id
		shop = self.session.query(models.Shop).filter_by(id = shop_id).first()
		if not shop:
			return self.send_fail('shop not found')
		shop_name = shop.shop_name
		shop_code = shop.shop_code
		shop_phone = shop.shop_phone
		jsApi  = JsApi_pub()

		# order detail
		create_date = order.create_date
		receiver    = order.receiver
		phone       = order.phone
		address     = order.address_text
		send_time   = order.send_time
		remark      = order.remark
		pay_type    = order.pay_type
		online_type = order.online_type
		status      = order.status
		order_num	= order.num

		charge_types = self.session.query(models.ChargeType).filter(
			models.ChargeType.id.in_(eval(order.fruits).keys())).all()
		if order.type == 2:
			freight = order.shop.config.freight_on_time
		else:
			freight = order.shop.config.freight_now
		staff_id = order.SH2_id
		staff_info = self.session.query(models.Accountinfo).filter_by(id = staff_id).first()
		if staff_info is not None:
				sender_phone = staff_info.phone
				sender_img = staff_info.headimgurl_small
		else:
				sender_phone = None
				sender_img = None
		goods = []
		f_d = eval(order.fruits)
		for f in f_d:
			goods.append([f_d[f].get('fruit_name'),f_d[f].get('charge'),f_d[f].get('num')])

		qr_url=""
		if not self.is_wexin_browser():
			qr_url = self._qrwxpay(shop_name)
			# print("[WeixinPay]qr_url:",qr_url)
			return self.render('customer/online-qrwxpay.html',qr_url = qr_url,totalPrice = totalPrice,\
			shop_name = shop_name,create_date=create_date,receiver=receiver,phone=phone,address=address,\
			send_time = send_time,remark=remark,pay_type=pay_type,online_type=online_type,freight = freight,\
			goods = goods,sender_phone=sender_phone,sender_img=sender_img,charge_types=charge_types,\
			order=order,shop_code=shop_code,shop_phone = shop_phone)

		path = APP_OAUTH_CALLBACK_URL + self.reverse_url('onlineWxPay')
		code = self.args.get('code',None)
		if len(code) is 2:
			url = jsApi.createOauthUrlForCode(path)
			# print("[WeixinPay]code url:",url)
			return self.redirect(url)
		else:
			jsApi.setCode(code)
			openid = jsApi.getOpenid()
			# print("[WeixinPay]current code:",code)
			if not openid:
				print("[WeixinPay]OpenID not found")
			unifiedOrder =   UnifiedOrder_pub()
			# totalPrice = self.args['totalPrice']
			# totalPrice =float( self.get_cookie('money'))
			# print("[WeixinPay]totalPrice:",totalPrice)
			shop_name = re.compile(u'[\U00010000-\U0010ffff]').sub(u'',shop_name)
			unifiedOrder.setParameter("body",shop_name + '-订单号-'+str(order_num))
			url = APP_OAUTH_CALLBACK_URL + '/customer/onlinewxpay'
			unifiedOrder.setParameter("notify_url",url)
			unifiedOrder.setParameter("openid",openid)
			unifiedOrder.setParameter("out_trade_no",order_num)
			# orderPriceSplite = (order.price) * 100
			wxPrice =int(totalPrice * 100)
			# print("[WeixinPay]wxPrice:",wxPrice)
			unifiedOrder.setParameter('total_fee',wxPrice)
			unifiedOrder.setParameter('trade_type',"JSAPI")
			prepay_id = unifiedOrder.getPrepayId()
			# print("[WeixinPay]prepay_id:",prepay_id)
			if not prepay_id:
				return self.send_fail("微信支付失败,请稍后再试!")
			jsApi.setPrepayId(prepay_id)
			renderPayParams = jsApi.getParameters()
			# print("[WeixinPay]renderPayParams:",renderPayParams)
			noncestr = "".join(random.sample('zyxwvutsrqponmlkjihgfedcba0123456789', 10))
			timestamp = datetime.datetime.now().timestamp()
			wxappid = 'wx0ed17cdc9020a96e'
			signature = self.signature(noncestr,timestamp,path_url)

			qr_url = self._qrwxpay(shop_name)
		return self.render("fruitzone/paywx.html",qr_url = qr_url ,renderPayParams = renderPayParams,wxappid = wxappid,\
			noncestr = noncestr ,timestamp = timestamp,signature = signature,totalPrice = totalPrice,\
			shop_name = shop_name,create_date=create_date,receiver=receiver,phone=phone,address=address,\
			send_time = send_time,remark=remark,pay_type=pay_type,online_type=online_type,freight = freight,\
			goods = goods,sender_phone=sender_phone,sender_img=sender_img,charge_types=charge_types,\
			order=order,shop_code = shop_code,shop_phone = shop_phone)