95992828九五至尊2

【882828九五至尊手机版】微信摇一摇红包效用,开发微信门户及运用

二月 21st, 2019  |  882828九五至尊手机版

摇一摇周边红包接口是为线下商家提供的发红包成效。用户可以在商家门店等线下地方通过摇一摇周边领取商户发放的红包。作者已经在《C#开发微信门户及运用(28)–微信“摇一摇·周边”效率的施用和接口的完结》介绍过微信摇一摇的连锁管理,包蕴页面、设备之间的关系,以及接纳等位置内容。本篇继续介绍摇一摇设备的其余一项意义,摇一摇红包作用,介绍怎么着行使微信摇摇周边的后台配置好页面及地址,然后通过微信JSSDK的点子,摇一摇获取红包的满贯流程效能。

摇一摇周边红包接口是为线下专营商提供的发红包功用。用户可以在商家门店等线下地方通过摇一摇周边领取商户发放的红包。小编早就在《C#支出微信门户及应用(28)–微信“摇一摇·周边”成效的拔取和接口的落到实处》介绍过微信摇一摇的有关管理,包罗页面、设备之间的关联,以及利用等地点内容。本篇继续介绍摇一摇设备的其余一项职能,摇一摇红包功能,介绍如何利用微信摇摇周边的后台配置好页面及地方,然后经过微信JSSDK的点子,摇一摇获取红包的全套流程功效。

壹 、微信摇一摇红包成效介绍

功能表明

摇一摇周边红包接口是为线下商户提供的发红包功效。用户可以在商家门店等线下地方通过摇一摇周边领取商户发放的红包,在线上转载分享无效。

开发者可经过接口开发摇一摇红包功效,特点包罗:

  1. 可选用采取模板加载页或自定义Html5页面调起微信原生红包页面(详见创制红包活动中use_template字段,1为运用模板,2为运用自定义Html5页面)
  2. 原生红包页面拆红包,无需通过群众号音信发出
  3. 提供关爱群众号能力,用户可活动接纳是或不是关注(裂变红包分享时不济)
  4. 做到页面可配备跳转链接,可跳转商行的其余自定义Html5页面
  5. 同叁个用户在单个红包活动中不得不领到1回红包

用户侧交互流程

平时的摇一摇红包的流程如下所示,那里没有运用用户自定义的模版,约等于采纳系统内置的(努力加载中。。。)的页面,红包须要团结拆开。

882828九五至尊手机版 1

红包组件接口调用流程

  1. 报名红包接口权限:登录摇一摇周边商家后台https://zb.weixin.qq.com ,进入开发者支持,申请开通摇一摇红包组件接口;
  2. 红包预下单:调用微信支付的api进行红包预下单,告知须求发放的红包金额,人数,生成红包ticket;
  3. 始建活动并录入红包消息:调用摇周边平台的api录入创制红包活动并录入音讯,传入预下单时生成的红包ticket;
  4. 调用jsapi抽红包:在摇出的页面中通过调用jsapi抽红包,抽中红包的用户可以拆红包;
  5. 调用以上接口时,红包提供商行和红包发给商家公众号须要一律。

摇一摇红包的处理进度可以先的流水线表达,申请权限后,需求在摇一摇后台配置相关的红包处理页面,然后经过红包接口处理提交红包数量,最终经过摇一摇的配备摇出界面,使用JSAPI达成抽取红包的操作,具体经过如下所示。

882828九五至尊手机版 2

其中红包接口处理,是调用一多级的红包接口完成的,包含红包预下单、创制红包活动、录入红包新闻等操作,如下所示。

882828九五至尊手机版 3 

摇一摇红包效用开通在后台获取接口即可,如下所示。

882828九五至尊手机版 4

若是已经有相关的摇一摇设备(假如没有可能要求进入新的摇一摇设备,请参见上篇散文《C#开发微信门户及利用(28)–微信“摇一摇·周边”功效的应用和接口的兑现》的连带介绍,有了装备后在页面管理中添加一个页面,用来拍卖摇一摇的音信的。

882828九五至尊手机版 5

页面的音信,就是添加自定义链接界面,如下所示。

882828九五至尊手机版 6

接下来配置好U奇骏L地址接口,U奇骏L地址还须要考虑什么得到用户的openid,因为摇一摇红包接口必须要拿走当前用户的openid新闻,大家可以透过重定向的章程,使用code获取相应的openid消息,具体前面详细介绍。

882828九五至尊手机版 7

 

① 、微信摇一摇红包功用介绍

效率表达

摇一摇周边红包接口是为线下商家提供的发红包功效。用户可以在卖家门店等线下场合通过摇一摇周边领取商行发放的红包,在线上转发分享无效。

开发者可经过接口开发摇一摇红包功效,特点包罗:

  1. 可选拔使用模板加载页或自定义Html5页面调起微信原生红包页面(详见创造红包活动中use_template字段,1为运用模板,2为运用自定义Html5页面)
  2. 原生红包页面拆红包,无需通过群众号音讯发出
  3. 提供关爱群众号能力,用户可机关采纳是不是关怀(裂变红包分享时不济)
  4. 成就页面可计划跳转链接,可跳转商户的此外自定义Html5页面
  5. 同三个用户在单个红包活动中不得不领取三回红包

用户侧交互流程

好端端的摇一摇红包的流程如下所示,那里没有动用用户自定义的沙盘,约等于接纳系统内置的(努力加载中。。。)的页面,红包要求团结拆开。

882828九五至尊手机版 8

红包组件接口调用流程

  1. 报名红包接口权限:登录摇一摇周边商户后台https://zb.weixin.qq.com ,进入开发者襄助,申请开展摇一摇红包组件接口;
  2. 红包预下单:调用微信支付的api进行红包预下单,告知要求发放的红包金额,人数,生成红包ticket;
  3. 创办活动并录入红包音讯:调用摇周边平台的api录入创造红包活动并录入音信,传入预下单时生成的红包ticket;
  4. 调用jsapi抽红包:在摇出的页面中经过调用jsapi抽红包,抽中红包的用户可以拆红包;
  5. 调用以上接口时,红包提供卖家和红包发给商行公众号须要一律。

摇一摇红包的处理进程可以先的流程表达,申请权限后,要求在摇一摇后台配置相关的红包处理页面,然后通过红包接口处理提交红包数量,最终经过摇一摇的装置摇出界面,使用JSAPI完毕抽取红包的操作,具体进度如下所示。

882828九五至尊手机版 9

里头红包接口处理,是调用一多重的红包接口完毕的,包蕴红包预下单、成立红包活动、录入红包新闻等操作,如下所示。

882828九五至尊手机版 10 

摇一摇红包功用开通在后台获取接口即可,如下所示。

882828九五至尊手机版 11

万一已经有有关的摇一摇设备(假设没有只怕须求投入新的摇一摇设备,请参见上篇小说《C#支付微信门户及选用(28)–微信“摇一摇·周边”功用的应用和接口的贯彻》的相关介绍,有了设施后在页面管理中添加二个页面,用来处理摇一摇的音信的。

882828九五至尊手机版 12

页面的音讯,就是添加自定义链接界面,如下所示。

882828九五至尊手机版 13

下一场配置好ULX570L地址接口,U途乐L地址还亟需考虑什么赢得用户的openid,因为摇一摇红包接口必必要赢得当前用户的openid音讯,大家得以透过重定向的章程,使用code获取相应的openid新闻,具体后面详细介绍。

882828九五至尊手机版 14

 

② 、红包接口处理

前方介绍了,红包接口处理,是调用一连串的红包接口完成的,包含红包预下单、成立红包活动、录入红包音讯等操作,如下所示。

882828九五至尊手机版 15 

那么大家就要求各自对那么些操作进行包装,并付出有关的数额了。

据悉前面小说《C#付出微信门户及运用(33)–微信现深黑包的卷入及使用》里面的平整,我们把摇一摇的相关接口也放在那个ILotteryApi接口和LotteryApi达成类里面,如下所示。

882828九五至尊手机版 16

下边的摇一摇红包接口全部是依照上边的接口和落到实处类举办完美处理的。

 

1)红包预下单

接口表明

安装单个红包的金额,类型等,生成红包音信。预下单落成后,须要在72钟头内调用jsapi完结抽红包的操作。(红包过期失效后,资金会退回到商家财付通帐号。)

接口调用表达

服务器端调用
http请求方式: POST
https://api.mch.weixin.qq.com/mmpaymkttransfers/hbpreorder
POST数据格式:XML
需要商户证书

伸手示例

<xml>     
<sign><![CDATA[E1EE61A91C8E90F299DE6AE075D60A2D]]></sign>     
<mch_billno><![CDATA[0010010404201411170000046545]]></mch_billno>     
<mch_id><![CDATA[10000097]]></mch_id>     
<wxappid><![CDATA[wxcbda96de0b165486]]></wxappid>     
<send_name><![CDATA[send_name]]></send_name>     
<hb_type><![CDATA[NORMAL]]></hb_type>     
<auth_mchid><![CDATA[10000098]]></auth_mchid>     
<auth_appid><![CDATA[wx7777777]]></auth_appid>     
<total_amount><![CDATA[200]]></total_amount>     
<amt_type><![CDATA[ALL_RAND]]></amt_type>     
<total_num><![CDATA[3]]></total_num>     
<wishing><![CDATA[恭喜发财 ]]></wishing>     
<act_name><![CDATA[ 新年红包 ]]></act_name>     
<remark><![CDATA[新年红包 ]]></remark>     
<risk_cntl><![CDATA[NORMAL]]></risk_cntl>     
<nonce_str><![CDATA[50780e0cca98c8c8e814883e5caa672e]]></nonce_str>
</xml>

回来数据证实

回到格式为xml

成功示范

<xml>     
<return_code><![CDATA[SUCCESS]]></return_code>     
<return_msg><![CDATA[发放成功.]]></return_msg> 
<result_code><![CDATA[SUCCESS]]></result_code> 
<err_code><![CDATA[0]]></err_code>     
<err_code_des><![CDATA[发放成功.]]></err_code_des>     
<mch_billno><![CDATA[0010010404201411170000046545]]></mch_billno> 
<mch_id>10010404</mch_id>     
<wxappid><![CDATA[wx6fa7e3bab7e15415]]></wxappid>     
<sp_ticket><![CDATA[0cca98c8c8e814883]]></sp_ticket> 
<total_amount>3</total_amount>     
<detail_id><![CDATA[001001040420141117000004888]]></detail_id> 
<send_time><![CDATA[20150101080000]]></send_time> 
</xml>  

战败示例

<xml>     
<return_code><![CDATA[FAIL]]></return_code>     
<return_msg><![CDATA[系统繁忙,请稍后再试.]]></return_msg>     
<result_code><![CDATA[FAIL]]></result_code>     
<err_code><![CDATA[268458547]]></err_code>     
<err_code_des><![CDATA[系统繁忙,请稍后再试.]]></err_code_des>     
<mch_billno><![CDATA[0010010404201411170000046542]]></mch_billno>             
<mch_id>10010404</mch_id>     
<wxappid><![CDATA[wx6fa7e3bab7e15415]]></wxappid>      
<total_amount>3</total_amount> 
</xml>

依照请求参数的表明,以及重回的结果,大家可以分级定义它们的传入参数和散播参数,具体的红包预下单的接口定义如下

        /// <summary>
        /// 红包预下单接口。需要商户证书
        /// 设置单个红包的金额,类型等,生成红包信息。预下单完成后,需要在72小时内调用jsapi完成抽红包的操作。(红包过期失效后,资金会退回到商户财付通帐号。)
        /// </summary>
        /// <param name="data">传入参数数据</param>
        /// <returns></returns>
        LotteryPreOrderResult LotteryPreOrder(LotteryPreOrderData info);

里头LotteryPreOrderResult重回的靶子结果如下所示,主要的消息是要记录sp_ticket,近来未曾经过API接口获取已经预下单红包的sp_ticket消息,所以自然要先记下好,前面在录入红包的时候,要求采取到这几个单子。

    public class LotteryPreOrderResult : PayResult
    {
        /// <summary>
        /// 商户订单号
        /// </summary>
        public string mch_billno { get; set; }
        /// <summary>
        /// 公众账号appid
        /// </summary>
        public string wxappid { get; set; }
        /// <summary>
        /// 总付款金额,单位分
        /// </summary>
        public int total_amount { get; set; }
        /// <summary>
        /// 一个普通红包对应一个ticket
        /// </summary>
        public string sp_ticket { get; set; }
        /// <summary>
        /// 红包内部订单号
        /// </summary>
        public string detail_id { get; set; }
        /// <summary>
        /// 红包发放时间 
        /// </summary>
        public string send_time { get; set; }
    }

 

2)创造红包活动

接口表明

创制红包活动,设置红包活动有效期,红包活动开关等基本消息,重回活动id

接口调用表明

服务器端调用
http请求方式: POST
URL: https://api.weixin.qq.com/shakearound/lottery/addlotteryinfo?access_token=ACCESSTOKEN&use_template=1&logo_url=”LOGO_URL”

请求参数表明

参数 类型 说明
access_token string accesstoken,以参数的形式拼装在url后
use_template int 是否使用模板,1:使用,2:不使用,以参数的形式拼装在url后。(模版即交互流程图中的红包加载页,使用模板用户不需要点击可自动打开红包;不使用模版需自行开发HTML5页面,并在页面调用红包jsapi)
logo_url string 使用模板页面的logo_url,不使用模板时可不加。展示在摇一摇界面的消息图标。图片尺寸为120×120。

POST BODY:JSON格式的结构体,具体音讯不在赘述,可是值得表达的是其中的Key是急需留意的,那么些值一定须求动用贰个规定的值,因为急需和前边的抽取红包的签名处理一致,否则会出错不可以抽取红包。

参数 类型 说明
title string 抽奖活动名称(选择使用模板时,也作为摇一摇消息主标题),最长6个汉字,12个英文字母。
desc string 抽奖活动描述(选择使用模板时,也作为摇一摇消息副标题),最长7个汉字,14个英文字母。
onoff int 抽奖开关。0关闭,1开启,默认为1
begin_time long 抽奖活动开始时间,unix时间戳,单位秒
expire_time long 抽奖活动结束时间,unix时间戳,单位秒,红包活动有效期最长为91天
sponsor_appid string 红包提供商户公众号的appid,需与预下单中的公众账号appid(wxappid)一致
total long 红包总数,红包总数是录入红包ticket总数的上限,因此红包总数应该大于等于预下单时红包ticket总数。
jump_url string 红包关注界面后可以跳转到第三方自定义的页面
key string 开发者自定义的key,用来生成活动抽奖接口的签名参数,长度32位。使用方式见sign生成规则

恳请示例

Content-Type: application/json Post Body:
{                                                            
 "title": "title",                           
 "desc": "desc",                             
 "onoff": 1,                                 
 "begin_time": 1428854400,                            
 "expire_time": 1428940800,                           
 "sponsor_appid": "wxxxxxxxxxxxxxx",
 "total": 10,
 "jump_url": JUMP_URL,     
 "key": "keyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"                            
}

回去数据申明

示例

{     
 "errcode":0,     
 "errmsg":"",     
 "lottery_id":"xxxxxxllllll", 
 "page_id":1, 
}

据悉地方的接口定义和接口参数表明,我们得以定义创设红包活动的接口定义,如下所示

        /// <summary>
        /// 创建红包活动,设置红包活动有效期,红包活动开关等基本信息,返回活动id
        /// </summary>
        /// <param name="accessToken">调用接口凭证</param>
        /// <param name="useTempate">是否使用模板</param>
        /// <param name="login_url">使用模板页面的logo_url,不使用模板时可不加。展示在摇一摇界面的消息图标。图片尺寸为120x120。</param>
        /// <returns></returns>
        AddLotterResult AddLotteryInfo(string accessToken, bool useTempate, string login_url, AddLotteryJson json);

内部AddLotteryResult为大家定义的接口处理结果,首要必要记录其中的LotteryID,那么些值需求在后头的录入红包接口使用到。

    /// <summary>
    /// 添加红包活动的结果
    /// </summary>
    public class AddLotterResult : ErrorJsonResult
    {
        /// <summary>
        /// 生成的红包活动id
        /// </summary>
        public string lottery_id { get; set; }
        /// <summary>
        /// 生成的模板页面ID  
        /// </summary>
        public int page_id { get; set; }
    }

 

3)录入红包音信

在红包预下单,以及开创红包活动后,就必要把前边两者的音讯涉及起来,这一个操作就是录入红包消息,录入红包音讯包蕴提交红包活动的ID,以及红包预下单的sp_ticket的票子音讯,那样就足以让用户抽取具体的红包信息了。

接口表明

在调用”创立红包活动”接口之后,调用此接口录入红包音信。注意,此接口每回调用,都会向有个别活动新增一批红包音讯,即使红包数少于九十八个,请通过1遍调用添加全数红包音信。借使红包数大于100,可以屡屡调用接口添加。请小心保管数次录入的红包ticket总的数目不高于成立该红包活动时设置的total值。

接口调用表达

服务器端调用
http请求方式: POST
URL:https://api.weixin.qq.com/shakearound/lottery/setprizebucket?access_token=ACCESSTOKEN

POST BODY:JSON格式的结构体

参数 类型 说明
lottery_id string 红包抽奖id,来自addlotteryinfo返回的lottery_id
mchid string 红包提供者的商户号,,需与预下单中的商户号mch_id一致
sponsor_appid string 红包提供商户公众号的appid,需与预下单中的公众账号appid(wxappid)一致
prize_info_list json数组 红包ticket列表,如果红包数较多,可以一次传入多个红包,批量调用该接口设置红包信息。每次请求传入的红包个数上限为100
ticket string 预下单时返回的红包ticket,单个活动红包ticket数量上限为100000个,可添加多次。

恳请示例

Content-Type: application/json Post Body:
{     
"lottery_id": "xxxxxxllllll",     
"mchid": "10000098",     
"sponsor_appid": "wx8888888888888888"     
"prize_info_list": [         
     {            
   "ticket": "v1|ZiPs2l0hpMBp3uwGI1rwp45vOdz/V/zQ/00jP9MeWT+e47/q1FJjwCIP34frSjzOxAEzJ7k2CtAg1pmcShvkChBWqbThxPm6MBuzceoHtj79iHuHaEn0WAO+j4sXnXnbGswFOlDYWg1ngvrRYnCY3g==",                                   
     }
   ]
}

归来数据评释

示例

{         
"errcode":0,     
"errmsg":"",     
"repeat_ticket_list":[         
     {            
"ticket": "v1|ZiPs2l0hpMBp3uwGI1rwp45vOdz/V/zQ/00jP9MeWT+e47/q1FJjwCIP34frSjzOxAEzJ7k2CtAg1pmcShvkChBWqbThxPm6MBuzceoHtj79iHuHaEn0WAO+j4sXnXnbGswFOlDYWg1ngvrRYnCY3g==",                       
     }            
  ]     
"success_num":100 
}

据悉这几个接口定义和传递参数消息,大家可以定义录入红包的接口。

        /// <summary>
        /// 录入红包信息
        /// 在调用"创建红包活动"接口之后,调用此接口录入红包信息。
        /// 注意,此接口每次调用,都会向某个活动新增一批红包信息,如果红包数少于100个,请通过一次调用添加所有红包信息。
        /// 如果红包数大于100,可以多次调用接口添加。请注意确保多次录入的红包ticket总的数目不大于创建该红包活动时设置的total值。
        /// </summary>
        /// <param name="accessToken">调用接口凭证</param>
        /// <param name="json">录入红包信息</param>
        /// <returns></returns>
        SetPrizeBucketResult SetPrizeBucket(string accessToken, SetPrizeBucketJson json);

中间录入红包重回的结果类SetPrizeBucketResult 定义如下所示。

    /// <summary>
    /// 录入红包返回的结果
    /// </summary>
    public class SetPrizeBucketResult : ErrorJsonResult
    {
        /// <summary>
        /// 重复使用的ticket列表,如为空,将不返回
        /// </summary>
        public List<PrizeTicket> repeat_ticket_list { get; set; }
        /// <summary>
        /// 过期的ticket列表,如为空,将不返回
        /// </summary>
        public List<PrizeTicket> expire_ticket_list { get; set; }
        /// <summary>
        /// 金额不在大于1元,小于1000元的ticket列表,如为空,将不返回
        /// </summary>
        public List<PrizeTicket> invalid_amount_ticket_list { get; set; }
        /// <summary>
        /// 原因:生成红包的时候,授权商户号auth_mchid和auth_appid没有写摇周边的商户号
        /// </summary>
        public List<PrizeTicket> wrong_authmchid_ticket_list { get; set; }
        /// <summary>
        /// ticket解析失败,可能有错别字符或不完整    
        /// </summary>
        public List<PrizeTicket> invalid_ticket_list { get; set; }

        /// <summary>
        /// 成功录入的红包数量
        /// </summary>
        public int success_num { get; set; }
    }

 

② 、红包接口处理

日前介绍了,红包接口处理,是调用一名目繁多的红包接口已毕的,包涵红包预下单、创造红包活动、录入红包音信等操作,如下所示。

882828九五至尊手机版 17 

那么大家就要求各自对这么些操作进行包装,并付诸有关的数目了。

依照前面散文《C#开发微信门户及运用(33)–微信现深青莲包的卷入及采纳》里面的规则,我们把摇一摇的连锁接口也放在那一个ILotteryApi接口和LotteryApi已毕类里面,如下所示。

882828九五至尊手机版 18

下边的摇一摇红包接口全部是依据上边的接口和贯彻类进行宏观处理的。

 

1)红包预下单

接口表达

设置单个红包的金额,类型等,生成红包音信。预下单已毕后,需求在72钟头内调用jsapi落成抽红包的操作。(红包过期失效后,资金会退回到商家财付通帐号。)

接口调用说明

服务器端调用
http请求方式: POST
https://api.mch.weixin.qq.com/mmpaymkttransfers/hbpreorder
POST数据格式:XML
需要商户证书

请求示例

<xml>     
<sign><![CDATA[E1EE61A91C8E90F299DE6AE075D60A2D]]></sign>     
<mch_billno><![CDATA[0010010404201411170000046545]]></mch_billno>     
<mch_id><![CDATA[10000097]]></mch_id>     
<wxappid><![CDATA[wxcbda96de0b165486]]></wxappid>     
<send_name><![CDATA[send_name]]></send_name>     
<hb_type><![CDATA[NORMAL]]></hb_type>     
<auth_mchid><![CDATA[10000098]]></auth_mchid>     
<auth_appid><![CDATA[wx7777777]]></auth_appid>     
<total_amount><![CDATA[200]]></total_amount>     
<amt_type><![CDATA[ALL_RAND]]></amt_type>     
<total_num><![CDATA[3]]></total_num>     
<wishing><![CDATA[恭喜发财 ]]></wishing>     
<act_name><![CDATA[ 新年红包 ]]></act_name>     
<remark><![CDATA[新年红包 ]]></remark>     
<risk_cntl><![CDATA[NORMAL]]></risk_cntl>     
<nonce_str><![CDATA[50780e0cca98c8c8e814883e5caa672e]]></nonce_str>
</xml>

归来数据印证

回去格式为xml

中标示范

<xml>     
<return_code><![CDATA[SUCCESS]]></return_code>     
<return_msg><![CDATA[发放成功.]]></return_msg> 
<result_code><![CDATA[SUCCESS]]></result_code> 
<err_code><![CDATA[0]]></err_code>     
<err_code_des><![CDATA[发放成功.]]></err_code_des>     
<mch_billno><![CDATA[0010010404201411170000046545]]></mch_billno> 
<mch_id>10010404</mch_id>     
<wxappid><![CDATA[wx6fa7e3bab7e15415]]></wxappid>     
<sp_ticket><![CDATA[0cca98c8c8e814883]]></sp_ticket> 
<total_amount>3</total_amount>     
<detail_id><![CDATA[001001040420141117000004888]]></detail_id> 
<send_time><![CDATA[20150101080000]]></send_time> 
</xml>  

战败示例

<xml>     
<return_code><![CDATA[FAIL]]></return_code>     
<return_msg><![CDATA[系统繁忙,请稍后再试.]]></return_msg>     
<result_code><![CDATA[FAIL]]></result_code>     
<err_code><![CDATA[268458547]]></err_code>     
<err_code_des><![CDATA[系统繁忙,请稍后再试.]]></err_code_des>     
<mch_billno><![CDATA[0010010404201411170000046542]]></mch_billno>             
<mch_id>10010404</mch_id>     
<wxappid><![CDATA[wx6fa7e3bab7e15415]]></wxappid>      
<total_amount>3</total_amount> 
</xml>

依照请求参数的注明,以及重回的结果,大家可以分别定义它们的扩散参数和传颂参数,具体的红包预下单的接口定义如下

        /// <summary>
        /// 红包预下单接口。需要商户证书
        /// 设置单个红包的金额,类型等,生成红包信息。预下单完成后,需要在72小时内调用jsapi完成抽红包的操作。(红包过期失效后,资金会退回到商户财付通帐号。)
        /// </summary>
        /// <param name="data">传入参数数据</param>
        /// <returns></returns>
        LotteryPreOrderResult LotteryPreOrder(LotteryPreOrderData info);

其间LotteryPreOrderResult再次来到的目的结果如下所示,首要的音讯是要记录sp_ticket,近来未曾经过API接口获取已经预下单红包的sp_ticket消息,所以自然要先记下好,后边在录入红包的时候,须求选取到这些单子。

    public class LotteryPreOrderResult : PayResult
    {
        /// <summary>
        /// 商户订单号
        /// </summary>
        public string mch_billno { get; set; }
        /// <summary>
        /// 公众账号appid
        /// </summary>
        public string wxappid { get; set; }
        /// <summary>
        /// 总付款金额,单位分
        /// </summary>
        public int total_amount { get; set; }
        /// <summary>
        /// 一个普通红包对应一个ticket
        /// </summary>
        public string sp_ticket { get; set; }
        /// <summary>
        /// 红包内部订单号
        /// </summary>
        public string detail_id { get; set; }
        /// <summary>
        /// 红包发放时间 
        /// </summary>
        public string send_time { get; set; }
    }

 

2)成立红包活动

接口表明

创办红包活动,设置红包活动有效期,红包活动开关等着力消息,重临活动id

接口调用表达

服务器端调用
http请求方式: POST
URL: https://api.weixin.qq.com/shakearound/lottery/addlotteryinfo?access_token=ACCESSTOKEN&use_template=1&logo_url=”LOGO_URL”

呼吁参数说明

参数 类型 说明
access_token string accesstoken,以参数的形式拼装在url后
use_template int 是否使用模板,1:使用,2:不使用,以参数的形式拼装在url后。(模版即交互流程图中的红包加载页,使用模板用户不需要点击可自动打开红包;不使用模版需自行开发HTML5页面,并在页面调用红包jsapi)
logo_url string 使用模板页面的logo_url,不使用模板时可不加。展示在摇一摇界面的消息图标。图片尺寸为120×120。

POST BODY:JSON格式的结构体,具体新闻不在赘述,不过值得表明的是里面的Key是亟需专注的,那一个值一定需要动用二个规定的值,因为急需和前边的抽取红包的签名处理一致,否则会出错不能抽取红包。

参数 类型 说明
title string 抽奖活动名称(选择使用模板时,也作为摇一摇消息主标题),最长6个汉字,12个英文字母。
desc string 抽奖活动描述(选择使用模板时,也作为摇一摇消息副标题),最长7个汉字,14个英文字母。
onoff int 抽奖开关。0关闭,1开启,默认为1
begin_time long 抽奖活动开始时间,unix时间戳,单位秒
expire_time long 抽奖活动结束时间,unix时间戳,单位秒,红包活动有效期最长为91天
sponsor_appid string 红包提供商户公众号的appid,需与预下单中的公众账号appid(wxappid)一致
total long 红包总数,红包总数是录入红包ticket总数的上限,因此红包总数应该大于等于预下单时红包ticket总数。
jump_url string 红包关注界面后可以跳转到第三方自定义的页面
key string 开发者自定义的key,用来生成活动抽奖接口的签名参数,长度32位。使用方式见sign生成规则

恳请示例

Content-Type: application/json Post Body:
{                                                            
 "title": "title",                           
 "desc": "desc",                             
 "onoff": 1,                                 
 "begin_time": 1428854400,                            
 "expire_time": 1428940800,                           
 "sponsor_appid": "wxxxxxxxxxxxxxx",
 "total": 10,
 "jump_url": JUMP_URL,     
 "key": "keyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"                            
}

重返数据表明

示例

{     
 "errcode":0,     
 "errmsg":"",     
 "lottery_id":"xxxxxxllllll", 
 "page_id":1, 
}

据悉上面的接口定义和接口参数表达,我们得以定义创立红包活动的接口定义,如下所示

        /// <summary>
        /// 创建红包活动,设置红包活动有效期,红包活动开关等基本信息,返回活动id
        /// </summary>
        /// <param name="accessToken">调用接口凭证</param>
        /// <param name="useTempate">是否使用模板</param>
        /// <param name="login_url">使用模板页面的logo_url,不使用模板时可不加。展示在摇一摇界面的消息图标。图片尺寸为120x120。</param>
        /// <returns></returns>
        AddLotterResult AddLotteryInfo(string accessToken, bool useTempate, string login_url, AddLotteryJson json);

中间AddLotteryResult为我们定义的接口处理结果,首要需求记录其中的LotteryID,这些值要求在前边的录入红包接口使用到。

    /// <summary>
    /// 添加红包活动的结果
    /// </summary>
    public class AddLotterResult : ErrorJsonResult
    {
        /// <summary>
        /// 生成的红包活动id
        /// </summary>
        public string lottery_id { get; set; }
        /// <summary>
        /// 生成的模板页面ID  
        /// </summary>
        public int page_id { get; set; }
    }

 

3)录入红包新闻

在红包预下单,以及开创红包活动后,就必要把前边两者的新闻涉及起来,那一个操作就是录入红包新闻,录入红包音信包罗提交红包活动的ID,以及红包预下单的sp_ticket的契约音信,那样就能够让用户抽取具体的红包新闻了。

接口表达

在调用”创制红包活动”接口之后,调用此接口录入红包音讯。注意,此接口每一次调用,都会向某些活动新增一批红包音信,如若红包数少于九十九个,请通过二次调用充分全体红包音讯。如果红包数大于100,可以频仍调用接口添加。请留心保管数十次录入的红包ticket总的数目不超出创设该红包活动时设置的total值。

接口调用表达

服务器端调用
http请求方式: POST
URL:https://api.weixin.qq.com/shakearound/lottery/setprizebucket?access_token=ACCESSTOKEN

POST BODY:JSON格式的结构体

参数 类型 说明
lottery_id string 红包抽奖id,来自addlotteryinfo返回的lottery_id
mchid string 红包提供者的商户号,,需与预下单中的商户号mch_id一致
sponsor_appid string 红包提供商户公众号的appid,需与预下单中的公众账号appid(wxappid)一致
prize_info_list json数组 红包ticket列表,如果红包数较多,可以一次传入多个红包,批量调用该接口设置红包信息。每次请求传入的红包个数上限为100
ticket string 预下单时返回的红包ticket,单个活动红包ticket数量上限为100000个,可添加多次。

呼吁示例

Content-Type: application/json Post Body:
{     
"lottery_id": "xxxxxxllllll",     
"mchid": "10000098",     
"sponsor_appid": "wx8888888888888888"     
"prize_info_list": [         
     {            
   "ticket": "v1|ZiPs2l0hpMBp3uwGI1rwp45vOdz/V/zQ/00jP9MeWT+e47/q1FJjwCIP34frSjzOxAEzJ7k2CtAg1pmcShvkChBWqbThxPm6MBuzceoHtj79iHuHaEn0WAO+j4sXnXnbGswFOlDYWg1ngvrRYnCY3g==",                                   
     }
   ]
}

回到数据表明

示例

{         
"errcode":0,     
"errmsg":"",     
"repeat_ticket_list":[         
     {            
"ticket": "v1|ZiPs2l0hpMBp3uwGI1rwp45vOdz/V/zQ/00jP9MeWT+e47/q1FJjwCIP34frSjzOxAEzJ7k2CtAg1pmcShvkChBWqbThxPm6MBuzceoHtj79iHuHaEn0WAO+j4sXnXnbGswFOlDYWg1ngvrRYnCY3g==",                       
     }            
  ]     
"success_num":100 
}

基于那个接口定义和传递参数消息,大家得以定义录入红包的接口。

        /// <summary>
        /// 录入红包信息
        /// 在调用"创建红包活动"接口之后,调用此接口录入红包信息。
        /// 注意,此接口每次调用,都会向某个活动新增一批红包信息,如果红包数少于100个,请通过一次调用添加所有红包信息。
        /// 如果红包数大于100,可以多次调用接口添加。请注意确保多次录入的红包ticket总的数目不大于创建该红包活动时设置的total值。
        /// </summary>
        /// <param name="accessToken">调用接口凭证</param>
        /// <param name="json">录入红包信息</param>
        /// <returns></returns>
        SetPrizeBucketResult SetPrizeBucket(string accessToken, SetPrizeBucketJson json);

里面录入红包重回的结果类SetPrizeBucketResult 定义如下所示。

    /// <summary>
    /// 录入红包返回的结果
    /// </summary>
    public class SetPrizeBucketResult : ErrorJsonResult
    {
        /// <summary>
        /// 重复使用的ticket列表,如为空,将不返回
        /// </summary>
        public List<PrizeTicket> repeat_ticket_list { get; set; }
        /// <summary>
        /// 过期的ticket列表,如为空,将不返回
        /// </summary>
        public List<PrizeTicket> expire_ticket_list { get; set; }
        /// <summary>
        /// 金额不在大于1元,小于1000元的ticket列表,如为空,将不返回
        /// </summary>
        public List<PrizeTicket> invalid_amount_ticket_list { get; set; }
        /// <summary>
        /// 原因:生成红包的时候,授权商户号auth_mchid和auth_appid没有写摇周边的商户号
        /// </summary>
        public List<PrizeTicket> wrong_authmchid_ticket_list { get; set; }
        /// <summary>
        /// ticket解析失败,可能有错别字符或不完整    
        /// </summary>
        public List<PrizeTicket> invalid_ticket_list { get; set; }

        /// <summary>
        /// 成功录入的红包数量
        /// </summary>
        public int success_num { get; set; }
    }

 

三 、红包接口的接纳及JSAPI的摇一摇页面处理

面前表达了相关的接口音信和呼应的结果类的概念,大家现实在依照相关的求证,完毕接口的处理就可以了,那些小节介绍怎么样利用那些接口,完成我们对摇一摇红包的一切流程的处理。

如首先步,调用红包预下单处理。

        string sp_ticket = "";
        /// <summary>
        /// 红包预下单,并记录红包的ticket信息
        /// </summary>
        private void btnHbPreOrder_Click(object sender, EventArgs e)
        {
            LotteryPreOrderData info = new LotteryPreOrderData()
            {
                total_amount = 100,
                total_num = 1,
                act_name = "恭喜发财",
                remark = "恭喜发财",
                wishing = "恭喜发财",
            };
            var result = hbApi.LotteryPreOrder(info);
            sp_ticket = result.sp_ticket;//赋值,方便下面的录入红包操作
            Console.WriteLine(XmlConvertor.FormatXml(result.ToXml()));
        }

第2部成立红包活动,如下所示。

        string lotteryId = "";
        /// <summary>
        /// 创建红包活动,并记录活动的ID
        /// </summary>
        private void btnCreateLottery_Click(object sender, EventArgs e)
        {
            AddLotteryJson json = new AddLotteryJson()
            {
                begin_time = DateTime.Now.DateTimeToInt(),
                expire_time = DateTime.Now.AddDays(90).DateTimeToInt(),
                title = "测试红包",
                desc = "测试红包",
                sponsor_appid = this.AppId,
                onoff = 1,
                total = 1, 
                jump_url = "http://www.iqidi.com",
                key = accountInfo.PayAPIKey
            };

            var result = hbApi.AddLotteryInfo(token, false, null, json);
            lotteryId = result.lottery_id;//赋值方便查询红包

            Console.WriteLine(result.ToJson());
        }

其三步,依照红包预下单结果和红包活动成立结果,录入红包信息

        /// <summary>
        /// 录入红包信息,供使用摇一摇页面处理
        /// </summary>
        private void btnSetHB_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(sp_ticket))
            {
                MessageUtil.ShowError("红包票据ticket为空");
                return;
            }

            SetPrizeBucketJson json = new SetPrizeBucketJson()
            {
                lottery_id = lotteryId, //使用前面的红包活动
                mchid = accountInfo.MchID,
                sponsor_appid = accountInfo.AppID,
                prize_info_list = new List<PrizeTicket>()
                {
                    new PrizeTicket() { ticket = sp_ticket},//使用前面的红包预下单ticket
                }
            };
            var result = hbApi.SetPrizeBucket(this.token, json);
            Console.WriteLine("录入红包的结果:");
            Console.WriteLine(result.ToJson());
        }

第五步,配置好重定向的页面,方便获取用户的openid

1)用户同意授权,获取code

本条手续,我们运用的是“网页授权获取用户基本消息”操作,其中相关的音讯验证如下所示。

在担保微信公众账号拥有授权作用域(scope参数)的权杖的前提下(服务号得到高级接口后,暗许拥有scope参数中的snsapi_base和snsapi_userinfo),率领关注者打开如下页面:

https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
若提示“该链接无法访问”,请检查参数是否填写错误,是否拥有scope参数对应的授权作用域权限。

更是令人瞩目:由于授权操作安全等级较高,所以在倡议授权请求时,微信会对授权链接做正则强匹配校验,即使链接的参数顺序不对,授权页面将不只怕平常访问

参考链接(请在微信客户端中打开此链接体验)
Scope为snsapi_base
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx520c15f417810387&redirect_uri=https%3A%2F%2Fchong.qq.com%2Fphp%2Findex.php%3Fd%3D%26c%3DwxAdapter%26m%3DmobileDeal%26showwxpaytitle%3D1%26vb2ctag%3D4_2030_5_1194_60&response_type=code&scope=snsapi_base&state=123#wechat_redirect
Scope为snsapi_userinfo
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxf0e81c3bee622d60&redirect_uri=http%3A%2F%2Fnba.bluewebgame.com%2Foauth_response.php&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect

越来越令人瞩目:跳转回调redirect_uri,应当利用https链接来确保授权code的安全性。

如此,如若我们布署的连接为http://www.iqidi.com/JSSDKTest/RedPack?uid=iqidiSoftware
,其中uid为大家相应的账号名称。

那么大家根据地方规则,得到重定向的接连地址就是之类所示。

https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx3d81fc2886d86526&redirect_uri=http%3a%2f%2fwww.iqidi.com%2fJSSDKTest%2fRedPack%3fuid%3diqidiSoftware&response_type=code&scope=snsapi_base&state=state#wechat_redirect

2)通过code换取网页授权access_token

首先请留心,那里通过code换取的是贰个奇异的网页授权access_token,与基础支撑中的access_token(该access_token用于调用其他接口)不一致。公众号可通过下述接口来收获网页授权access_token。即使网页授权的效能域为snsapi_base,则本步骤中收获到网页授权access_token的同时,也取得到了openid,snsapi_base式的网页授权流程即到此甘休。

进一步令人瞩目:由于民众号的secret和得到到的access_token安全级别都格外高,必须只保存在服务器,不容许传给客户端。后续刷新access_token、通过access_token获取用户新闻等手续,也亟须从服务器发起。

伸手方法

获取code后,请求以下链接获取access_token: 
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

参数表达

 

882828九五至尊手机版 19

在现实的页面里面,大家可以赢得有关的参数,如uid大家得以把它转换为我们相应的账号音信,如下所示。

        /// <summary>
        /// 根据账号名获取对应的对象
        /// </summary>
        /// <returns></returns>
        private AccountInfo GetAccount()
        {
            AccountInfo accountInfo = null;
            string accountNo = Request.QueryString["uid"];
            if (!string.IsNullOrEmpty(accountNo))
            {
                accountInfo = BLLFactory<Account>.Instance.FindByAccountNo(accountNo);
            }
            return accountInfo;
        }

而其间的code,大家依照这一个信息,也得以赢得用户的连带音讯,大家需求得到访问用户的openid,如下所示。

                string code = Request.QueryString["code"];
                IBasicApi baseApi = new BasicApi();
                var result = baseApi.GetAuthToken(accountInfo.UniteAppId, accountInfo.UniteAppSecret, code);
                if (result != null && !string.IsNullOrEmpty(result.openid))
                {
                    var openid = result.openid;

有了这一个音讯,我们就足以营造大家的红包参数,并打包好签名了。

                    WxPayData data = new WxPayData();
                    data.SetValue("openid", openid);
                    data.SetValue("lottery_id", lottery_id);
                    data.SetValue("noncestr", data.GenerateNonceStr());
                    data.SetValue("sign", data.MakeSign(accountInfo.PayAPIKey));

接下来,我们在后台,把这几个新闻赋值给ViewBag,就足以在页面上顺遂使用了。

                    var sign = data.GetString("sign");//获取生成的sign
                    var noncestr = data.GetString("noncestr");//获取生成的sign

                    ViewBag.sign = sign;
                    ViewBag.lottery_id = lottery_id;
                    ViewBag.openid = openid;
                    ViewBag.noncestr2 = noncestr;

在摇一摇红包的处理视图页面里面,我们先引入对应的js文件,如下所示

    <title>摇一摇红包页面</title>
    <link rel="stylesheet" href="http://demo.open.weixin.qq.com/jssdk/css/style.css?ts=1420774989">
    <script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.1.0.js"></script>
    <script type="text/javascript" src="http://zb.weixin.qq.com/app/shakehb/BeaconShakehbJsBridge.js"></script>

然后在JS里面添加相关的处理函数,并赋值给相应的接口参数。

    <script type="text/javascript">
    BeaconShakehbJsBridge.ready(function () {
        //跳转到抽红包页面
        BeaconShakehbJsBridge.invoke('jumpHongbao', {
            lottery_id: '@ViewBag.lottery_id',
            noncestr: '@ViewBag.noncestr2',
            openid: '@ViewBag.openid',
            sign: '@ViewBag.sign'
        });
    });
    </script>

最终,大家测试相关的结果,使用手机摇一摇得到红包的历程界面效果如下所示。

882828九五至尊手机版 20  882828九五至尊手机版 21

882828九五至尊手机版 22  882828九五至尊手机版 23

 

若果对这么些《C#付出微信门户及运用》连串感兴趣,可以关心小编的其余文章,体系小说如下所示:

C#开发微信门户及运用(38)–微信摇一摇红包功用

C#付出微信门户及应用(37)–微信公众号标签管理功用

C#支出微信门户及使用(36)–微信卡劵管理的包装操作

C#支付微信门户及运用(35)–微信支付之集团付款封装操作

C#开发微信门户及应用(34)–微信裂变红包

C#付出微信门户及运用(33)–微信现橙褐包的包装及使用

C#支出微信门户及利用(32)–微信支付接入和API封装使用

C#支出微信门户及使用(31)–微信语义通晓接口的贯彻和拍卖

C#支付微信门户及运用(30)–音信的群发处理和预览功效

C#支付微信门户及利用(28)–微信“摇一摇·周边”功效的运用和接口的贯彻

C#支付微信门户及应用(27)-公众号模板音讯管理 

C#开发微信门户及选拔(26)-公众号微信资料管理

C#付出微信门户及利用(25)-微信集团号的客户端管住成效

C#支出微信门户及应用(24)-微信小店货架新闻保管

C#支出微信门户及选用(23)-微信小店商品管理接口的卷入和测试

C#支付微信门户及利用(22)-微信小店的花费和应用

C#支付微信门户及应用(21)-微信企业号的音信和事件的收纳处理及解密 

C#支付微信门户及使用(20)-微信集团号的菜谱管理

C#开发微信门户及拔取(19)-微信公司号的新闻发送(文本、图片、文件、语音、录像、图文音讯等)

C#支付微信门户及运用(18)-微信公司号的通讯录管理支付之成员管理

C#支付微信门户及利用(17)-微信集团号的通信录管理支出之部门管理

C#支付微信门户及应用(16)-微信集团号的布署和应用

C#开发微信门户及使用(15)-微信菜单扩张扫一扫、发图片、发地理地方作用

C#开发微信门户及拔取(14)-在微信菜单中应用重定向获取用户数据

C#支付微信门户及运用(13)-使用地理地点扩大相关应用

C#开发微信门户及应用(12)-使用语音处理

C#付出微信门户及使用(11)–微信菜单的种种突显方法介绍

C#付出微信门户及采取(10)–在保管系列中共同微信用户分组信息

C#开发微信门户及运用(9)-微信门户菜单管理及提交到微信服务器

C#付出微信门户及利用(8)-微信门户应用管理连串作用介绍

C#付出微信门户及使用(7)-微信多客服功用及支付集成

C#付出微信门户及采纳(6)–微信门户菜单的保管操作

C#支出微信门户及利用(5)–用户分组新闻保管

C#支付微信门户及使用(4)–关心用户列表及详细新闻管理

C#开发微信门户及采用(3)–文本新闻和图文消息的应对

C#开发微信门户及利用(2)–微信音信的拍卖和应对

C#付出微信门户及使用(1)–开头采用微信接口

 

叁 、红包接口的应用及JSAPI的摇一摇页面处理

前方表明了相关的接口新闻和呼应的结果类的概念,大家实际在根据相关的表明,落成接口的处理就足以了,那几个小节介绍怎么着运用那几个接口,完成大家对摇一摇红包的全体流程的拍卖。

如首先步,调用红包预下单处理。

        string sp_ticket = "";
        /// <summary>
        /// 红包预下单,并记录红包的ticket信息
        /// </summary>
        private void btnHbPreOrder_Click(object sender, EventArgs e)
        {
            LotteryPreOrderData info = new LotteryPreOrderData()
            {
                total_amount = 100,
                total_num = 1,
                act_name = "恭喜发财",
                remark = "恭喜发财",
                wishing = "恭喜发财",
            };
            var result = hbApi.LotteryPreOrder(info);
            sp_ticket = result.sp_ticket;//赋值,方便下面的录入红包操作
            Console.WriteLine(XmlConvertor.FormatXml(result.ToXml()));
        }

其次部创立红包活动,如下所示。

        string lotteryId = "";
        /// <summary>
        /// 创建红包活动,并记录活动的ID
        /// </summary>
        private void btnCreateLottery_Click(object sender, EventArgs e)
        {
            AddLotteryJson json = new AddLotteryJson()
            {
                begin_time = DateTime.Now.DateTimeToInt(),
                expire_time = DateTime.Now.AddDays(90).DateTimeToInt(),
                title = "测试红包",
                desc = "测试红包",
                sponsor_appid = this.AppId,
                onoff = 1,
                total = 1, 
                jump_url = "http://www.iqidi.com",
                key = accountInfo.PayAPIKey
            };

            var result = hbApi.AddLotteryInfo(token, false, null, json);
            lotteryId = result.lottery_id;//赋值方便查询红包

            Console.WriteLine(result.ToJson());
        }

其三步,依照红包预下单结果和红包活动创设结果,录入红包信息

        /// <summary>
        /// 录入红包信息,供使用摇一摇页面处理
        /// </summary>
        private void btnSetHB_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(sp_ticket))
            {
                MessageUtil.ShowError("红包票据ticket为空");
                return;
            }

            SetPrizeBucketJson json = new SetPrizeBucketJson()
            {
                lottery_id = lotteryId, //使用前面的红包活动
                mchid = accountInfo.MchID,
                sponsor_appid = accountInfo.AppID,
                prize_info_list = new List<PrizeTicket>()
                {
                    new PrizeTicket() { ticket = sp_ticket},//使用前面的红包预下单ticket
                }
            };
            var result = hbApi.SetPrizeBucket(this.token, json);
            Console.WriteLine("录入红包的结果:");
            Console.WriteLine(result.ToJson());
        }

第5步,配置好重定向的页面,方便获取用户的openid

1)用户同意授权,获取code

以此手续,大家应用的是“网页授权获取用户基本音信”操作,其中有关的音信验证如下所示。

在保管微信公众账号拥有授权功能域(scope参数)的权能的前提下(服务号拿到高级接口后,暗中认可拥有scope参数中的snsapi_base和snsapi_userinfo),指引关注者打开如下页面:

https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
若提示“该链接无法访问”,请检查参数是否填写错误,是否拥有scope参数对应的授权作用域权限。

越是令人瞩目:由于授权操作安全等级较高,所以在提倡授权请求时,微信会对授权链接做正则强匹配校验,假诺链接的参数顺序不对,授权页面将无法平常访问

参考链接(请在微信客户端中打开此链接体验)
Scope为snsapi_base
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx520c15f417810387&redirect_uri=https%3A%2F%2Fchong.qq.com%2Fphp%2Findex.php%3Fd%3D%26c%3DwxAdapter%26m%3DmobileDeal%26showwxpaytitle%3D1%26vb2ctag%3D4_2030_5_1194_60&response_type=code&scope=snsapi_base&state=123#wechat_redirect
Scope为snsapi_userinfo
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxf0e81c3bee622d60&redirect_uri=http%3A%2F%2Fnba.bluewebgame.com%2Foauth_response.php&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect

更进一步令人瞩目:跳转回调redirect_uri,应当使用https链接来保险授权code的安全性。

那般,尽管大家配备的接连为http://www.iqidi.com/JSSDKTest/RedPack?uid=iqidiSoftware
,其中uid为大家相应的账号名称。

那就是说大家按照地点规则,拿到重定向的总是地址就是之类所示。

https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx3d81fc2886d86526&redirect_uri=http%3a%2f%2fwww.iqidi.com%2fJSSDKTest%2fRedPack%3fuid%3diqidiSoftware&response_type=code&scope=snsapi_base&state=state#wechat_redirect

2)通过code换取网页授权access_token

先是请留心,那里通过code换取的是二个异样的网页授权access_token,与功底支撑中的access_token(该access_token用于调用其余接口)差距。公众号可透过下述接口来博取网页授权access_token。借使网页授权的作用域为snsapi_base,则本步骤中赢拿到网页授权access_token的同时,也获取到了openid,snsapi_base式的网页授权流程即到此甘休。

更是令人瞩目:由于民众号的secret和收获到的access_token安全级别都不行高,必须只保存在服务器,不允许传给客户端。后续刷新access_token、通过access_token获取用户音讯等手续,也非得从服务器发起。

呼吁方法

获取code后,请求以下链接获取access_token: 
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

参数表达

 

882828九五至尊手机版 24

在切切实实的页面里面,大家得以博得有关的参数,如uid我们可以把它转换为我们相应的账号音讯,如下所示。

        /// <summary>
        /// 根据账号名获取对应的对象
        /// </summary>
        /// <returns></returns>
        private AccountInfo GetAccount()
        {
            AccountInfo accountInfo = null;
            string accountNo = Request.QueryString["uid"];
            if (!string.IsNullOrEmpty(accountNo))
            {
                accountInfo = BLLFactory<Account>.Instance.FindByAccountNo(accountNo);
            }
            return accountInfo;
        }

而内部的code,我们根据那么些新闻,也可以获得用户的有关音信,大家须求拿到访问用户的openid,如下所示。

                string code = Request.QueryString["code"];
                IBasicApi baseApi = new BasicApi();
                var result = baseApi.GetAuthToken(accountInfo.UniteAppId, accountInfo.UniteAppSecret, code);
                if (result != null && !string.IsNullOrEmpty(result.openid))
                {
                    var openid = result.openid;

有了这一个音信,大家就可以打造大家的红包参数,并打包好签名了。

                    WxPayData data = new WxPayData();
                    data.SetValue("openid", openid);
                    data.SetValue("lottery_id", lottery_id);
                    data.SetValue("noncestr", data.GenerateNonceStr());
                    data.SetValue("sign", data.MakeSign(accountInfo.PayAPIKey));

接下来,大家在后台,把那些消息赋值给ViewBag,就可以在页面上顺遂使用了。

                    var sign = data.GetString("sign");//获取生成的sign
                    var noncestr = data.GetString("noncestr");//获取生成的sign

                    ViewBag.sign = sign;
                    ViewBag.lottery_id = lottery_id;
                    ViewBag.openid = openid;
                    ViewBag.noncestr2 = noncestr;

在摇一摇红包的拍卖视图页面里面,大家先引入对应的js文件,如下所示

    <title>摇一摇红包页面</title>
    <link rel="stylesheet" href="http://demo.open.weixin.qq.com/jssdk/css/style.css?ts=1420774989">
    <script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.1.0.js"></script>
    <script type="text/javascript" src="http://zb.weixin.qq.com/app/shakehb/BeaconShakehbJsBridge.js"></script>

接下来在JS里面添加相关的处理函数,并赋值给相应的接口参数。

    <script type="text/javascript">
    BeaconShakehbJsBridge.ready(function () {
        //跳转到抽红包页面
        BeaconShakehbJsBridge.invoke('jumpHongbao', {
            lottery_id: '@ViewBag.lottery_id',
            noncestr: '@ViewBag.noncestr2',
            openid: '@ViewBag.openid',
            sign: '@ViewBag.sign'
        });
    });
    </script>

末尾,大家测试相关的结果,使用手机摇一摇拿到红包的进度界面效果如下所示。

882828九五至尊手机版 25  882828九五至尊手机版 26

882828九五至尊手机版 27  882828九五至尊手机版 28

 

如果对那几个《C#支付微信门户及利用》体系感兴趣,可以关怀自小编的其他小说,种类小说如下所示:

C#支出微信门户及利用(38)–微信摇一摇红包成效

C#支出微信门户及使用(37)–微信公众号标签管理功用

C#支付微信门户及接纳(36)–微信卡劵管理的包装操作

C#支付微信门户及利用(35)–微信支付之集团付款封装操作

C#开发微信门户及使用(34)–微信裂变红包

C#付出微信门户及拔取(33)–微信现纯白包的卷入及使用

C#付出微信门户及利用(32)–微信支付接入和API封装使用

C#支出微信门户及使用(31)–微信语义领会接口的贯彻和处理

C#支出微信门户及采取(30)–新闻的群发处理和预览功效

C#支出微信门户及运用(28)–微信“摇一摇·周边”功效的行使和接口的落实

C#支出微信门户及利用(27)-公众号模板音信管理 

C#支付微信门户及使用(26)-公众号微信资料管理

C#开发微信门户及运用(25)-微信集团号的客户端管住效果

C#付出微信门户及应用(24)-微信小店货架新闻保管

C#支出微信门户及使用(23)-微信小店商品管理接口的包装和测试

C#支出微信门户及采取(22)-微信小店的开支和采取

C#付出微信门户及运用(21)-微信公司号的消息和事件的吸纳处理及解密 

C#付出微信门户及利用(20)-微信公司号的菜系管理

C#付出微信门户及应用(19)-微信集团号的新闻发送(文本、图片、文件、语音、录制、图文消息等)

C#开发微信门户及利用(18)-微信集团号的通信录管理支出之成员管理

C#开发微信门户及应用(17)-微信集团号的通信录管理支出之部门管理

C#支付微信门户及使用(16)-微信集团号的布局和行使

C#支付微信门户及接纳(15)-微信菜单伸张扫一扫、发图片、发地理地点效用

C#支付微信门户及运用(14)-在微信菜单中行使重定向获取用户数据

C#支付微信门户及利用(13)-使用地理地点增加相关应用

C#开发微信门户及使用(12)-使用语音处理

C#付出微信门户及运用(11)–微信菜单的两种表现格局介绍

C#付出微信门户及运用(10)–在治本连串中多头微信用户分组音信

C#开发微信门户及利用(9)-微信门户菜单管理及提交到微信服务器

C#开发微信门户及应用(8)-微信门户应用管理体系功用介绍

C#付出微信门户及使用(7)-微信多客服功能及用度集成

C#付出微信门户及运用(6)–微信门户菜单的管住操作

C#支付微信门户及应用(5)–用户分组音讯保管

C#支付微信门户及采用(4)–关注用户列表及详细音信管理

C#开发微信门户及利用(3)–文本音讯和图文新闻的作答

C#付出微信门户及应用(2)–微信新闻的处理和答复

C#支出微信门户及采用(1)–开首使用微信接口

 

相关文章

Your Comments

近期评论

    功能


    网站地图xml地图