def login(): next_url = request.args.get('next') channel_name = request.args.get( 'channel', request.cookies.get('channel', config.DEFAULT_CHANNEL)) if current_user.is_authenticated( ) and current_user.channel_name == channel_name: next_url = next_url or url_for('main.index') return redirect(next_url) @after_this_request def remember_channel_name(response): response.set_cookie('channel', channel_name) return response if channel_name == config.LvyePaySitePayClientConfig.CHANNEL_NAME: # 绿野用户中心 next_url = next_url or url_for('main.index') auth_url = build_url(config.HOST_URL + url_for('auth.auth'), next=next_url) login_url = build_url(config.UserCenter.PASSPORT_LOGIN_URL, refererUrl=auth_url) return redirect(login_url) elif channel_name == config.LvyeCorpPaySitePayClientConfig.CHANNEL_NAME: user_domain_name = 'lvye_corp' # 绿野公司 form = LvyeCorpLoginForm() if form.validate_on_submit(): username = form.username.data password = form.password.data domain_user = DomainUser.query.filter_by( user_domain_name=user_domain_name, username=username).first() if domain_user is not None and domain_user.verify_password( password): # login user. is_leader = True user = User(domain_user.id, domain_user.username, domain_user.username, is_leader, domain_user.phone, channel_name) do_login_user(user) domain_user.ping() next_url = next_url or url_for('main.index') return redirect(next_url) flash('用户名或密码错误', category='error') return render_template('auth/lvye_corp_login.html', channel=channel_name, form=form, next=next_url) return render_template('info.html', msg="错误的登录")
def do_refund(refund_no, trade_no, refund_fee, notify_url, dback_notify_url, info=None): dt = datetime.now() info = info if info else "程序退款" detail_data = '%s^%s^%s' % (trade_no, refund_fee, info) batch_record = dba.getupdate_or_create_alipay_batch_refund_record( trade_no, refund_no) batch_no = batch_record.batch_no params = { 'service': config.Service.REFUND_NOPWD_URL, 'partner': config.PID, '_input_charset': config.INPUT_CHARSET, 'sign_type': SignType.MD5, 'notify_url': notify_url, 'dback_notify_url': dback_notify_url, 'batch_no': batch_no, 'refund_date': dt.strftime('%Y-%m-%d %H:%M:%S'), 'batch_num': '1', 'detail_data': detail_data, } url = build_url(config.GATEWAY_URL, _input_charset=config.INPUT_CHARSET) return request(url, params)
def query_trade(out_trade_no, trade_no=''): params = { 'service': ali_pay.Service.SINGLE_TRADE_QUERY, 'partner': ali_pay.PID, '_input_charset': ali_pay.INPUT_CHARSET, 'sign_type': SignType.MD5, 'out_trade_no': out_trade_no, 'trade_no': trade_no } url = build_url(ali_pay.GATEWAY_URL, _input_charset=ali_pay.INPUT_CHARSET) return request(url, params)
def do_pay(sn, vas_name, payment_scene, extra_params=None, client_type=None): from .constant import WeixinPayType result = pay_client.get_payment_param(sn, payment_scene, vas_name, extra_params) if not pay_client.is_success_result(result): return payment_failed(result, client_type=client_type) # echo back vas_name, and payment_type. vas_name = result.data['vas_name'] payment_type = result.data['payment_type'] params = result.data['params'] if vas_name == 'ALI_PAY': if client_type == RequestClientType.WEIXIN: return render_template(get_template("checkout/info", client_type), go_back=True, msg="请在浏览器或支付宝中打开使用支付宝支付。") url = params['_url'] return Response(generate_submit_form(url, params, keep_all=True, excludes={'_url'})) elif vas_name == 'WEIXIN_PAY': if payment_type == WeixinPayType.NATIVE: code_url = params['code_url'] info = params['_info'] return render_template("checkout/wx_pay_native.html", code_url=code_url, info=info, sn=sn) elif payment_type == WeixinPayType.JSAPI: if client_type != RequestClientType.WEIXIN: return render_template(get_template("checkout/info", client_type), go_back=True, msg="请在微信中打开使用微信支付。") if '_url' in params: import urllib url = params['_url'] # FIXME: sn, vas_name exchange dest_url = config.HOST_URL + url_for('checkout_entry.pay', sn=vas_name, vas_name=sn, x='') redirect_uri = urls.build_url(config.Checkout.WEIXIN_AUTH_REDIRECT_URI, dest_url=dest_url) url = url % (urllib.urlencode({'x': redirect_uri})[2:],) return redirect(url) return render_template("checkout/wx_pay_jsapi.html", params=params, sn=sn) elif vas_name == 'LIANLIAN_PAY': url = params['_url'] return Response(generate_submit_form(url, params)) elif vas_name == 'TEST_PAY': url = params['_url'] return Response(generate_submit_form(url, params)) elif vas_name == 'ZYT': # 自游通余额支付 url = params['_url'] params['_sn'] = sn return Response(generate_submit_form(url, params, keep_all=True)) return render_template(get_template("checkout/info", client_type), go_back=True, msg="支付方式错误")
def notify_verify(notify_id): if notify_id is None: return True params = { 'service': ali_pay.Service.NOTIFY_VERIFY, 'partner': ali_pay.PID, 'notify_id': notify_id } url = build_url(ali_pay.GATEWAY_URL, **params) try: req = requests.get(url) res = req.text ok = res == 'true' if not ok: logger.warn('notify verify: [{0}]'.format(res)) return ok except Exception as e: logger.warn(e.message) return False
def pay_param(out_trade_no, subject, body, total_fee, notify_url, return_url): params = _get_common_params(out_trade_no, subject, body, total_fee, notify_url) params.update({ 'service': ali_pay.Service.DIRECT_PAY_BY_USER, 'return_url': return_url, # 'qr_pay_mode': '2', 'paymethod': ali_pay.PayMethod.DIRECT_PAY, 'enable_paymethod': 'directPay^bankPay^creditCardExpress^debitCardExpress', 'sign_type': SignType.MD5, }) params['sign'] = signer.sign(params, params['sign_type']) params['_url'] = build_url(ali_pay.GATEWAY_URL, _input_charset=ali_pay.INPUT_CHARSET) logger.info("request ali pay WEB: {0}".format(params)) return params