用微信提现手续费到银行卡两次了,但是都没有😡😳绑定银行卡的手机也办理

微信公众号开发小记——4.两种邀请用户的方式 扫码&&链接
描述假设的我们的服务号有这么一些功能,比如底部有按钮,点击会有一些复杂的功能,这时候可能就需要一个用户系统,有用户系统就经常想要做什么分享邀请新用户之类的,这时候就又有几种方式,1.直接一个连接,让其他用户点;2.有一个二维码,让离得近的朋友扫。借着这个需求体会了下微信开发的两种不同类型(80非80端口的两种开发),以及python-social-auth的一些正确姿势。而这个需求其实就对应了两种开发模式,比如有个需求可以在公众号内直接回复,或者在一个页面里面让用户提交表单等等。通过连接邀请首先,理解需求:用户在微信点击我们的邀请连接后,会引导用户做一个有绿色按钮的微信登录,用户登陆后成为我们的用户,并且跳转到某个页面。关于用户微信登录的事情我们通过python-social-auth已经解决了(参考我的上一篇博客微信公众号开发小记——3.接入三方登录),所以可以直接用django的login_required装饰器完成这种事情。由于微信号的登录只有微信,所以LOGIN_URL = '/login/weixinapp/'class InviteUserView(View):'''邀请注册'''@method_decorator(login_required) def get(self, request): return HttpResponseRedirect(reverse('myauth:personal-center'))上面的代码只是保证用户点解邀请链接会成为我们的用户,但是没有记录对应的邀请者信息等等,由于邀请这个事情其实是一个登录的流程,所以可以写在pipeline里面def invite_user(backend, user, response, *args, **kwargs): is_new = kwargs['is_new'] if not is_new or not user:return # 二维码扫描... # 点击邀请链接 next_url = backend.strategy.session_get('next') if next_url: params = parse_url(next_url)['params'] inviter_id = params.get('inviter_id') if inviter_id and user:try: inviter = User.objects.get(id=inviter_id) UserInvite.invite_user(inviter_id, user, only_allow_invited_by_one_user=True)except:return user._inviter = inviter return {'inviter': inviter}通过扫码邀请首先,扫码是一个服务号80端口的事件,所以代码添加在weixin_server/views.py微信公众号开发小记——2.80端口上的服务难点在于这里,微信扫码后是直接进入公众号的,如果你想要让用户进入公众号之后就变成我们的用户而不是让他在点一个东西这里是比较蛋疼的,因为你的服务器在这时候做302微信是不认得。这就导致了几个问题:由于不引导用户登录,我这里没办法直接用python-social-auth里面的do_complete方法(因为拿不到用户的access_token),不过好处是使用微信服务器的access_token以及用户的openid我可以直接拿到这个用户的用户信息。这个问题就变成了python-social-auth的do_complete有用户response后执行pipeline的逻辑了。然后我扒了下代码,用了几个小时从单测里面找到了这个逻辑,具体见handle_invite_scan,这段代码才是这篇博客里面难度最大的东西def weixin_handler_event_scan(self, request, parsed_wechat, *args, **kwargs): key = parsed_wechat.message.key # 对应生成二维码的key ticket = parsed_wechat.message.ticket if ticket: response = self.handle_invite_scan(request, parsed_wechat, key) if response: return response return self.weixin_handler_event( request, parsed_wechat, *args, **kwargs)def handle_invite_scan(self, request, parsed_wechat, scene_id):try: qrcode = QRCode.objects.get(scene_id=scene_id, action_type='invite_user') except QRCode.DoesNotExist:return openid = parsed_wechat.message.source user_info = parsed_wechat.get_user_info(openid) strategy = load_strategy(request) backend = WeixinOAuth2APP() backend.strategy = strategy idx, backend, xargs, xkwargs = strategy.partial_from_session({'next':0, 'backend': backend,'args':[], 'kwargs':{'qrcode': qrcode},}) xkwargs.update({'response': user_info}) user = backend.continue_pipeline(pipeline_index=idx, *xargs, **xkwargs) if not user:return if user.is_new and hasattr(user, '_inviter'): content = u'感谢您的加入,邀请者是 {}'.format(user._inviter.username) response_xml = parsed_wechat.response_text(content=content) return HttpResponse(response_xml, content_type='application/xml')然后就可以正常的执行了,由于二维码的机制跟url不同,所以需要单独的二维码处理逻辑下面先把pipeline的那段代码贴过来,这里没什么特殊的def invite_user(backend, user, response, *args, **kwargs): is_new = kwargs['is_new'] if not is_new or not user:return # 二维码扫描 qrcode = kwargs.get('qrcode') if qrcode and qrcode.userprofile_set.all().exists(): inviter = qrcode.userprofile_set.all()[0].usertry: UserInvite.invite_user(inviter.id, user, only_allow_invited_by_one_user=True)except:return user._inviter = inviter return {'inviter': inviter}....微信二维码二维码有两种大的类型,永久二维码、临时二维码,永久上线10万张,scenen_id为1~10万,然而他又有scenen_str这种字符串的形式,那肯定选第二种字符串了;临时二维码则scenen_id为1~2^10,这点需要注意,超过这个限制secen_id都是2^10-1,而且蛋疼的是,临时二维码会有过期时间需要维护这个二维码。为了方便我们的业务逻辑查询,我添加了一个action_type的字段,来做业务上的区别,方便查询。class QRCode(models.Model): TEMP_QRCODE_UPDATE_DAYS = 7 QR_SCENE = 'QR_SCENE' QR_LIMIT_SCENE = 'QR_LIMIT_SCENE' QR_LIMIT_STR_SCENE = 'QR_LIMIT_STR_SCENE' ACTION_NAME_CHOICES = ( (QR_SCENE, QR_SCENE), (QR_LIMIT_SCENE, QR_LIMIT_SCENE), (QR_LIMIT_STR_SCENE, QR_LIMIT_STR_SCENE),) url = models.URLField(blank=True, max_length=255, default='') # QR_SCENE时上限为2**32 scene_id = models.CharField(blank=True, max_length=255, db_index=True, default='') update_time = models.DateTimeField(blank=True, null=True) action_name = models.CharField(max_length=30, choices=ACTION_NAME_CHOICES, default=QR_SCENE, db_index=True) action_type = models.CharField(max_length=255, default='', db_index=True)@classmethod def get_qrcode(cls, action_name, scene_id, action_type=None): now = timezone.now() qrcode = Nonetry: qrcode = cls.objects.get(action_name=action_name, scene_id=scene_id) # 临时二维码判断是否过期 if qrcode.action_name == cls.QR_SCENE: if qrcode.update_time and qrcode.url: _delta = now - qrcode.update_time if _delta.days < qrcode.TEMP_QRCODE_UPDATE_DAYS: return qrcodeelse: return qrcode except cls.DoesNotExist:pass if not qrcode: qrcode = cls(action_name=action_name,scene_id=scene_id,action_type=action_type) qrcode.update_time = now if action_name == cls.QR_SCENE: qrcode.url = create_temp_qrcode(scene_id)else: qrcode.url = create_permanent_qrcode(scene_id)qrcode.save() return qrcode@classmethod def generate_temp_scene_id(cls, obj_id): '''max id: 2 ** 32 = ''' return int('{}{}{}'.format(randint(1, 3), obj_id, uuid4().int)[:9])@property def qrcode_url(self): if not self.action_name or not self.scene_id: raise Exception(u'qrcode object must have action_name and scene_id value') now = timezone.now() # 永久化的二维码不必更新 if self.action_name != self.QR_SCENE: if not self.url: self.update_time = now self.url = create_permanent_qrcode(self.scene_id)self.save() return self.url # 临时二维码判断是否过期 if self.update_time and self.url: _delta = now - self.update_time if _delta.days < self.TEMP_QRCODE_UPDATE_DAYS: return self.url self.update_time = now self.url = create_temp_qrcode(self.scene_id)self.save() return self.url内容来源:/a/0643
最新教程周点击榜
微信扫一扫好基友的官网&APP缺张照片当首页,快来投票! - 霓虹国那些事儿 - 微信公众号文章
收录精选微信号文章!
上周好基友口袋地陪举办的「晒美照,上首页」活动得到了各位炫照狂魔的热烈响应,不到一周的时间收到了683张照片!
大家的脚步遍布了日本各地,看着照片就好像去日本深度旅游了一趟呢。_(:зゝ∠)_
无数神作中最终有18张优秀且适合作为官网&APP展示的图片入围,快来给心仪的作品投上一票!
1 X. 摄于镰仓
2 Aucifer 摄于大阪
3 hansjohnson 摄于大阪新世界
4 浅浅还有鱼 摄于河口湖
5 长香二 摄于京都
6 栾 摄于新仓山浅间公园
7 Naomi 摄于京都建仁寺
8 CaroLine 摄于白川乡
9 Cheryl 摄于大阪天守阁前十字路口
10 Kingdom 摄于镰仓的海
11 Josie 摄于奈良公园
12 爱因打斯坦 摄于六本木之丘
13 风居住的街道W 摄于北海道
14 bubble 摄于镰仓
15 二二 摄于冲绳美丽海水族馆
16 张叶叶 摄于北海道函馆
17 luka 摄于爱宕念佛寺
18 6 摄于大阪hep five
投票之前再来回顾一下奖品
一等奖(3名)
▌作品登上口袋地陪官网&官方APP首页
▌日系护肤大礼包(剧透:有安耐晒!!!)
二等奖(5名)
▌日系护肤大礼包
▌口袋地陪定制旅行三件套
参与奖(10名)
▌口袋地陪定制旅行三件套
▌定制明信片
投出自己的宝贵的一票,为喜欢的作品助攻吧!
关注微信公众号“口袋地陪”,
获奖名单将于8月30日公布哦!
另外再给大家安利一波我们的小伙伴
真正的公主即便是躺在20张鸭绒被褥下,
依旧能感受到哪一颗豌豆的硬度,
而这种挑剔、精致、对生活品质的无止境追求不止存在于童话之中,
更是每个人内在的心愿。
面对美好,人人都想将童话投射进现实,
豌豆公主App正是因此而来——
把童话中豌豆公主挑剔到近乎极致的追求,带给大家。
豌豆还有更多源于日本的精致好物,
从风靡一时的卡乐比麦片到原汁原味的日式拉面,
从一瓶难求的CPB精华到化腐为奇的日本黑科技美容仪,
这些你都能在豌豆轻松拔草,日本直邮极速到手。
经常海淘的小伙伴们可以试试看,
日本进口还包邮哦。
文章出自微信公众号
:JapanReadygo
介绍日本发生的各种奇怪好玩的事
手机微信扫描上方二维码进行订阅
霓虹国那些事儿微信公众号最新文章
精品号随机推荐
最值得关注的微信公众号
每天签到送现金;每天抽奖送现金,天天送钱哦,值得关注。
赏金侠,一个可以赚钱的公众号~
带你去领悟那美妙的世界
喜欢电影朋友关注我吧,我们一起学习交流
瘦身小瑜伽,美腿塑形小平腹,每日分享美丽秘诀!
搜罗更多劲爆事件,娱乐花边新闻,最受关注的图片更多精彩敬请关注!八卦娱乐头条!!!
提倡国人品质生活,选择有机生态的生活方式,健康,养生,休闲,品味,修炼自己,温暖他人!
野史君一一道来,让你看到不一样的历史,让你发现原来历史可以这样看。
每日新鲜美女推送,分享优雅女神高清图片
想了解有关科技、趣味、创意和新奇的产品吗,想寻找创意小礼品和新鲜玩意吗?
微信公众平台导航5月第一&二周新歌音源&舞台总结 - 韩国me2day - 微信公众号文章
收录精选微信号文章!
乐童音乐家新专辑《思春记 上》主打曲《RE-BYE》占据Melon-Naver-Olleh-Genie-Bugs-Soribada-Mnet等韩国国内7大音源榜冠军,专辑收录曲《Green Window》也占据过Monkey3一位,以上表现显示了兄妹好声音的力量。
Infinite成员南优铉韩国时间9日凌晨发表的首张SOLO专辑《Write》主打曲《点头点头》发布后,在Melon-Naver等主要音源榜获得1位,并在Olleh-Soribada-Mnet等音源榜进入前5,南优铉更加成熟的歌唱实力得到认证。
少女时代成员Tiffany新曲《I Just Wanna Dance》发布后,在Naver-Olleh-Genie-Bugs-Soribada-Mnet等6大国内音源获得1位,新专辑在文莱-柬埔寨-中国香港-印度尼西亚-新加坡-中国台湾等13个国家及地区获得iTunes主要专辑榜单TOP专辑榜1位,名列美国iTunes榜单20位,这次Tiffany作为SOLO歌手的实力得到了全面认证。
白娥娟回归预告照16日公开,音源大户雅言妹纸既去年5月之后,今年5月又要回来啦~超级期待~
五月第二周的《人气歌谣》和《音乐银行》的一位由TWICE获得。
五月第三周的《人气歌谣》和《音乐银行》的一位均由防弹少年团获得。防弹少年团先在《人气歌谣》中带来了具有意义的获奖感言:这是这次活动最后的一天,又是第一次在《人气歌谣》拿到了一位,很有意义。真的很感谢公司的人们和粉丝们,这奖多亏了粉丝们才能拿到。阿米!阿米!
韩流生活馆
文章出自微信公众号
:hanguome2day
新浪微博@韩国me2day专属帐号
手机微信扫描上方二维码进行订阅
韩国me2day微信公众号最新文章
精品号随机推荐
最值得关注的微信公众号
每天签到送现金;每天抽奖送现金,天天送钱哦,值得关注。
赏金侠,一个可以赚钱的公众号~
带你去领悟那美妙的世界
喜欢电影朋友关注我吧,我们一起学习交流
瘦身小瑜伽,美腿塑形小平腹,每日分享美丽秘诀!
搜罗更多劲爆事件,娱乐花边新闻,最受关注的图片更多精彩敬请关注!八卦娱乐头条!!!
提倡国人品质生活,选择有机生态的生活方式,健康,养生,休闲,品味,修炼自己,温暖他人!
野史君一一道来,让你看到不一样的历史,让你发现原来历史可以这样看。
每日新鲜美女推送,分享优雅女神高清图片
想了解有关科技、趣味、创意和新奇的产品吗,想寻找创意小礼品和新鲜玩意吗?
微信公众平台导航我加入一个超100人的微信群需银行卡验证,在绑定银行卡操作过程中,输入预留的手机号时为什么总显示与_百度知道“公司创业初期,如何成功管理不确定性?为什么很多企业甚至很多大企业都不能长盛不衰?老板做战略的关键任务是什么?今天这篇,来自于今年4月份主题为“企业领导力培训”的哈佛课堂笔记,笔记包含案例和方法论,干货满满。一笔钱的投资逻辑
我们发现,商机通常会以两种形态出现在我们面前。
举例来说:
本文来自微信公众账号提交,由微信啦收录,转载请注明出处。
微信扫码 分享文章

我要回帖

更多关于 支付宝提现要手续费吗 的文章

 

随机推荐