2018-10-06 03:49:58 qq_29914837 阅读数 2210
  • 微信支付开发-微信公众号开发12-微信开发php

    微信公众平台开发之微信支付开发是子恒老师《微信公众平台开发》视频教程的第12部。详细讲解了用php进行微信支付的开发。内容包含获取支付密钥,微信公众号支付开发,扫码支付,微信刷卡支付,异步处理支付结果等等。欢迎反馈,微信/QQ:68183131

    27752 人正在学习 去看看 秦子恒

一、个性化菜单接口说明

为了帮助公众号实现灵活的业务运营,微信公众平台新增了个性化菜单接口,开发者可以通过该接口,让公众号的不同用户群体看到不一样的自定义菜单。该接口开放给已认证订阅号和已认证服务号。

开发者可以通过以下条件来设置用户看到的菜单:

1、用户标签(开发者的业务需求可以借助用户标签来完成)
2、性别
3、手机操作系统
4、地区(用户在微信客户端设置的地区)
5、语言(用户在微信客户端设置的语言)

个性化菜单接口说明:

1、个性化菜单要求用户的微信客户端版本在iPhone6.2.2,Android 6.2.4以上,暂时不支持其他版本微信
2、菜单的刷新策略是,在用户进入公众号会话页或公众号profile页时,如果发现上一次拉取菜单的请求在5分钟以前,就会拉取一下菜单,如果菜单有更新,就会刷新客户端的菜单。测试时可以尝试取消关注公众账号后再次关注,则可以看到创建后的效果
3、普通公众号的个性化菜单的新增接口每日限制次数为2000次,删除接口也是2000次,测试个性化菜单匹配结果接口为20000次
4、出于安全考虑,一个公众号的所有个性化菜单,最多只能设置为跳转到3个域名下的链接
5、创建个性化菜单之前必须先创建默认菜单(默认菜单是指使用普通自定义菜单创建接口创建的菜单)。如果删除默认菜单,个性化菜单也会全部删除
6、个性化菜单接口支持用户标签,请开发者注意,当用户身上的标签超过1个时,以最后打上的标签为匹配

个性化菜单匹配规则说明:

个性化菜单的更新是会被覆盖的。
例如公众号先后发布了默认菜单,个性化菜单1,个性化菜单2,个性化菜单3。那么当用户进入公众号页面时,将从个性化菜单3开始匹配,如果个性化菜单3匹配成功,则直接返回个性化菜单3,否则继续尝试匹配个性化菜单2,直到成功匹配到一个菜单。
根据上述匹配规则,为了避免菜单生效时间的混淆,决定不予提供个性化菜单编辑API,开发者需要更新菜单时,需将完整配置重新发布一轮。

二、目录

1 创建个性化菜单
2 删除个性化菜单
3 测试个性化菜单匹配结果
4 查询个性化菜单
5 删除所有菜单

三、创建个性化菜单

3.1创建个性化菜单接口说明
http请求方式:POST(请使用https协议)

https://api.weixin.qq.com/cgi-bin/menu/addconditional?access_token=ACCESS_TOKEN

请求示例

{
     "button":[
     {    
        "type":"click",
        "name":"今日歌曲",
         "key":"V1001_TODAY_MUSIC" },
    {     "name":"菜单",
        "sub_button":[
        {            
            "type":"view",
            "name":"搜索",
            "url":"http://www.soso.com/"},
            {
                         "type":"miniprogram",
                         "name":"wxa",
                         "url":"http://mp.weixin.qq.com",
                         "appid":"wx286b93c14bbf93aa",
                         "pagepath":"pages/lunar/index"
            },
             {
        "type":"click",
        "name":"赞一下我们",
        "key":"V1001_GOOD"
           }]
 }],
"matchrule":{
  "tag_id":"2",
  "sex":"1",
  "country":"中国",
  "province":"广东",
  "city":"广州",
  "client_platform_type":"2",
  "language":"zh_CN"
  }
}

参数说明

参数 是否必须 说明
button 一级菜单数组,个数应为1~3个
sub_button 二级菜单数组,个数应为1~5个
type 菜单的响应动作类型,view表示网页类型,click表示点击类型,miniprogram表示小程序类型
name 菜单标题,不超过16个字节,子菜单不超过40个字节
key click等点击类型必须 菜单KEY值,用于消息接口推送,不超过128字节
url view、miniprogram类型必须 网页链接,用户点击菜单可打开链接,不超过1024字节。当type为miniprogram时,不支持小程序的老版本客户端将打开本url
media_id media_id类型和view_limited类型必须 调用新增永久素材接口返回的合法media_id
appid miniprogram类型必须 小程序的appid
pagepath miniprogram类型必须 小程序的页面路径
matchrule 菜单匹配规则
tag_id 用户标签的id,可通过用户标签管理接口获取
sex 性别:男(1)女(2),不填则不做匹配
client_platform_type 客户端版本,当前只具体到系统型号:IOS(1), Android(2),Others(3),不填则不做匹配
country 国家信息,是用户在微信中设置的地区,具体请参考地区信息表
province 省份信息,是用户在微信中设置的地区,具体请参考地区信息表
city 城市信息,是用户在微信中设置的地区,具体请参考地区信息表
language 语言信息,是用户在微信中设置的语言,具体请参考语言表: 1、简体中文 “zh_CN” 2、繁体中文TW “zh_TW” 3、繁体中文HK “zh_HK” 4、英文 “en” 5、印尼 “id” 6、马来 “ms” 7、西班牙 “es” 8、韩国 “ko” 9、意大利 “it” 10、日本 “ja” 11、波兰 “pl” 12、葡萄牙 “pt” 13、俄国 “ru” 14、泰文 “th” 15、越南 “vi” 16、阿拉伯语 “ar” 17、北印度 “hi” 18、希伯来 “he” 19、土耳其 “tr” 20、德语 “de” 21、法语 “fr”

matchrule共六个字段,均可为空,但不能全部为空,至少要有一个匹配信息是不为空的。 country、province、city组成地区信息,将按照country、province、city的顺序进行验证,要符合地区信息表的内容。地区信息从大到小验证,小的可以不填,即若填写了省份信息,则国家信息也必填并且匹配,城市信息可以不填。 例如 “中国 广东省 广州市”、“中国 广东省”都是合法的地域信息,而“中国 广州市”则不合法,因为填写了城市信息但没有填写省份信息。 地区信息表请点击下载。

返回结果

正确时的返回JSON数据包如下,错误时的返回码请见接口返回码说明。

{"menuid":"208379533"}

3.2创建个性化菜单接口代码实现

	/**
	 * 自定义个性化菜单-个性化菜单接口  http请求方式:POST(请使用https协议)
	 */
    public static final String MENU_MATCHRULE_CREATE="https://api.weixin.qq.com/cgi-bin/menu/addconditional?access_token=ACCESS_TOKEN";
    

创建个性化菜单试题类

package weixin.entity.menu;

/**
 * @所属类别:实体类_菜单匹配规则
 * @用途:微信公众号开发中自定义菜单-创建个性化菜单(个性化菜单属性)
 * @author yilei
 * @version:1.0
 */
public class Matchrule {

	private String tag_id;//用户标签的id,可通过用户标签管理接口获取
	private String sex;//性别:男(1)女(2),不填则不做匹配
	private String country;// 国家信息,是用户在微信中设置的地区,具体请参考地区信息表
	private String province;//省份信息,是用户在微信中设置的地区,具体请参考地区信息表
	private String city;//城市信息,是用户在微信中设置的地区,具体请参考地区信息表
	private String client_platform_type;//客户端版本,当前只具体到系统型号:IOS(1), Android(2),Others(3),不填则不做匹配
	private String language;//语言信息,是用户在微信中设置的语言,具体请参考语言表: 1、简体中文 "zh_CN" 2、繁体中文TW "zh_TW" 3、繁体中文HK "zh_HK" 4、英文 "en" 5、印尼 "id" 6、马来 "ms" 7、西班牙 "es" 8、韩国 "ko" 9、意大利 "it" 10、日本 "ja" 11、波兰 "pl" 12、葡萄牙 "pt" 13、俄国 "ru" 14、泰文 "th" 15、越南 "vi" 16、阿拉伯语 "ar" 17、北印度 "hi" 18、希伯来 "he" 19、土耳其 "tr" 20、德语 "de" 21、法语 "fr"
	public String getTag_id() {
		return tag_id;
	}
	public void setTag_id(String tag_id) {
		this.tag_id = tag_id;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public String getCountry() {
		return country;
	}
	public void setCountry(String country) {
		this.country = country;
	}
	public String getProvince() {
		return province;
	}
	public void setProvince(String province) {
		this.province = province;
	}
	public String getCity() {
		return city;
	}
	public void setCity(String city) {
		this.city = city;
	}
	public String getClient_platform_type() {
		return client_platform_type;
	}
	public void setClient_platform_type(String client_platform_type) {
		this.client_platform_type = client_platform_type;
	}
	public String getLanguage() {
		return language;
	}
	public void setLanguage(String language) {
		this.language = language;
	}
	
	 
}

创建菜单实体类

package weixin.entity.menu;

/**
 * @所属类别:实体类
 * @用途:微信公众号开发中自定义菜单-自定义菜单创建接口(Menu类代表整个微信公众号自定义菜单)
 * @author yilei
 * @version:1.0
 */
public class Menu {

	private Button[] button;//button	是	一级菜单数组,个数应为1~3个

	private Matchrule matchrule ;//个性化菜单-	菜单匹配规则
	
	public Matchrule getMatchrule() {
		return matchrule;
	}

	public void setMatchrule(Matchrule matchrule) {
		this.matchrule = matchrule;
	}

	public Button[] getButton() {
		return button;
	}

	public void setButton(Button[] button) {
		this.button = button;
	}

	/**
	 * @param button
	 */
	public Menu(Button[] button) {
		this.button = button;
	}
	
	public Menu(){
		
	}

	/**
	 * @param button
	 * @param matchrule
	 */
	public Menu(Button[] button, Matchrule matchrule) {
		this.button = button;
		this.matchrule = matchrule;
	}
	
	
}

第一个方法initMenu()是组装默认菜单,第二个方法initMatchruleMenu()是组装个性化菜单

    /**
     * 组装默认菜单
     * @return
     */
    public static Menu initMenu(){
    Menu menu = new Menu();
    
    //---------菜单1、点击类型菜单-------------------//
    TypeButton c1 = new TypeButton();
    c1.setName("点击类型菜单1");
    c1.setType("click");
    c1.setKey("1");

    Button b1 = new Button();
    b1.setName("菜单标题1");
    b1.setSub_button(new Button[]{c1}); 

    //---------菜单2,具有2个子菜单(一个点击类型、一个是网页类型)   -------------------//
    TypeButton c2 = new TypeButton();
    c2.setName("点击类型菜单2");
    c2.setType("click");
    c2.setKey("11");

    TypeButton v1 = new TypeButton();
    v1.setName("点击网页类型2");
    v1.setType("view");
    v1.setUrl("http://www.baidu.com");
    
    Button b2 = new Button();
    b2.setName("菜单标题2");
    
    b2.setSub_button(new Button[]{c2,v1}); 
    
    //---------菜单3,具有5个子菜单(scancode_push/scancode_waitmsg/pic_sysphoto/pic_photo_or_album/pic_weixin/location_select)   -------------------//   
    TypeButton t1 = new TypeButton();
    t1.setName("扫码推事件");
    t1.setType("scancode_push");
    t1.setKey("scancode_push");
 
    TypeButton t2 = new TypeButton();
    t2.setName("扫码带提示");
    t2.setType("scancode_waitmsg");
    t2.setKey("scancode_waitmsg");
    
    TypeButton t3 = new TypeButton();
    t3.setName("系统拍照发图");
    t3.setType("pic_sysphoto");
    t3.setKey("pic_sysphoto");
    
    TypeButton t4 = new TypeButton();
    t4.setName("拍照或者相册发图");
    t4.setType("pic_photo_or_album");
    t4.setKey("pic_photo_or_album");
    
    TypeButton t5 = new TypeButton();
    t5.setName("微信相册发图");
    t5.setType("pic_weixin");
    t5.setKey("pic_weixin");

    TypeButton t6 = new TypeButton();
    t6.setName("发送位置");
    t6.setType("location_select");
    t6.setKey("location_select");
    
    Button b3 = new Button();
    b3.setName("菜单标题3"); 
    b3.setSub_button(new Button[]{t1,t2,t3,t4,t5});
       
    menu.setButton(new Button[]{b1,b2,b3});// 
    return menu;

    }
 
    
    /**
     * 组装个性化菜单1
     * @return
     */
    public static Menu initMatchruleMenu(){
    Menu menu = new Menu();
    
    //---------菜单1、点击类型菜单-------------------//
    TypeButton c1 = new TypeButton();
    c1.setName("点击类型菜单1");
    c1.setType("click");
    c1.setKey("1");

    Button b1 = new Button();
    b1.setName("个性化标题1");
    b1.setSub_button(new Button[]{c1}); 

    //---------菜单2,具有2个子菜单(一个点击类型、一个是网页类型)   -------------------//
    TypeButton c2 = new TypeButton();
    c2.setName("点击类型菜单2");
    c2.setType("click");
    c2.setKey("11");

    TypeButton v1 = new TypeButton();
    v1.setName("点击网页类型2");
    v1.setType("view");
    v1.setUrl("http://www.baidu.com");
    
    Button b2 = new Button();
    b2.setName("个性化标题2");
    
    b2.setSub_button(new Button[]{c2,v1}); 
    
    //---------菜单3,具有5个子菜单(scancode_push/scancode_waitmsg/pic_sysphoto/pic_photo_or_album/pic_weixin/location_select)   -------------------//   
    TypeButton t1 = new TypeButton();
    t1.setName("扫码推事件");
    t1.setType("scancode_push");
    t1.setKey("scancode_push");
 
    TypeButton t2 = new TypeButton();
    t2.setName("扫码带提示");
    t2.setType("scancode_waitmsg");
    t2.setKey("scancode_waitmsg");
    
    TypeButton t3 = new TypeButton();
    t3.setName("系统拍照发图");
    t3.setType("pic_sysphoto");
    t3.setKey("pic_sysphoto");
    
    TypeButton t4 = new TypeButton();
    t4.setName("拍照或者相册发图");
    t4.setType("pic_photo_or_album");
    t4.setKey("pic_photo_or_album");
    
    TypeButton t5 = new TypeButton();
    t5.setName("微信相册发图");
    t5.setType("pic_weixin");
    t5.setKey("pic_weixin");

    TypeButton t6 = new TypeButton();
    t6.setName("发送位置");
    t6.setType("location_select");
    t6.setKey("location_select");
    
    Button b3 = new Button();
    b3.setName("个性化标题3"); 
    b3.setSub_button(new Button[]{t1,t2,t3,t4,t5});
       
    menu.setButton(new Button[]{b1,b2,b3});
    Matchrule matchrule = new Matchrule();
    matchrule.setSex("1");//过滤男性
    menu.setMatchrule(matchrule);
    return menu;

    }

createMenu()方法是创建默认菜单,createMatchruleMenu()方法创建个性化菜单

    /**
     * 创建默认菜单
     * @param token(ACCESS_TOKEN)
     * @param menu(已经转换为json格式的Meun类型的字符串)
     * @return result =0,表示创建成功,否则失败
     */
    public static int createMenu(String token,String menu){
    	int errcode = 0;
    	String url = WeiXin.MENU_CREATE.replace("ACCESS_TOKEN", token);
    	JSONObject jsonObject = doPostStr(url, menu);
    	if(jsonObject != null){
    		errcode = jsonObject.getInt("errcode");
    	}
    	return errcode;
    }
    
    /**
     * 创建个性化菜单
     * @param token(ACCESS_TOKEN)
     * @param menu(已经转换为json格式的Meun类型的字符串)
     * @return result =0,表示创建成功,否则失败
     */
    public static String createMatchruleMenu(String token,String menu){
    	String menuid ="";
    	String url = WeiXin.MENU_MATCHRULE_CREATE.replace("ACCESS_TOKEN", token);
    	JSONObject jsonObject = doPostStr(url, menu);
    	if(jsonObject != null){
    		menuid = jsonObject.getString("menuid");
    	}
    	return menuid;
    }

第一个doPost()是创建默认菜单,第二个doPost()是创建个性化菜单使用

	/**
	 * 处理微信服务器发post请求发来的xml格式消息--创建默认菜单
	 */
 /*    @Override
	public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
    	ServletContext context = getServletContext();
    	AccessToken accessToken = (AccessToken) context.getAttribute("access_token");
    	String menu = JSONObject.fromObject(WeiXinCheck.initMenu()).toString();
    	//创建菜单
    	int errcode = WeiXinCheck.createMenu(accessToken.getAccessToken() , menu);
    	if(errcode==0){
    		System.out.println("菜单创建成功!");
    		long startTime=System.currentTimeMillis();   //获取开始时间
            // TODO 接收、处理、响应由微信服务器转发的用户发送给公众帐号的消息
            // 将请求、响应的编码均设置为UTF-8(防止中文乱码)
            request.setCharacterEncoding("UTF-8");
            response.setCharacterEncoding("UTF-8");
            System.out.println("微信的post请求进入了本地服务器了");
            String result = "";
            try {
                Map<String,String> map = WeiXinCheck.parseXml(request);
                System.out.println("微信公众号要开始发送消息");
                result =  WeiXinCheck.buildResponseMessage(map);
                
                if(result.equals("")){
                    result = "未正确响应";
                }
            } catch (Exception e) {
                e.printStackTrace();
                System.out.println("发生异常:"+ e.getMessage());
            }
            
            response.getWriter().println(result);
            System.out.println( result) ;
            long endTime=System.currentTimeMillis(); //获取结束时间
            System.out.println("程序运行时间: "+(endTime-startTime)+"ms");
    	}else{
    		System.out.println("菜单创建失败");
    	}
    	
    }
    */
	/**
	 * 处理微信服务器发post请求发来的xml格式消息----创建个性化菜单
	 */
  @Override
	public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
    	ServletContext context = getServletContext();
    	AccessToken accessToken = (AccessToken) context.getAttribute("access_token");
    	String menu = JSONObject.fromObject(WeiXinCheck.initMatchruleMenu()).toString();
    	//创建菜单
    	String menuid = WeiXinCheck.createMatchruleMenu(accessToken.getAccessToken() , menu);
    	if(!"".equals(menuid)){
    		System.out.println("菜单创建成功!");
    		long startTime=System.currentTimeMillis();   //获取开始时间
            // TODO 接收、处理、响应由微信服务器转发的用户发送给公众帐号的消息
            // 将请求、响应的编码均设置为UTF-8(防止中文乱码)
            request.setCharacterEncoding("UTF-8");
            response.setCharacterEncoding("UTF-8");
            System.out.println("微信的post请求进入了本地服务器了");
            String result = "";
            try {
                Map<String,String> map = WeiXinCheck.parseXml(request);
                System.out.println("微信公众号要开始发送消息");
                result =  WeiXinCheck.buildResponseMessage(map);
                
                if(result.equals("")){
                    result = "未正确响应";
                }
            } catch (Exception e) {
                e.printStackTrace();
                System.out.println("发生异常:"+ e.getMessage());
            }
            
            response.getWriter().println(result);
            System.out.println( result) ;
            long endTime=System.currentTimeMillis(); //获取结束时间
            System.out.println("程序运行时间: "+(endTime-startTime)+"ms");
    	}else{
    		System.out.println("菜单创建失败");
    	}
    	
    }

启动项目,因为我个性化菜单中设置了sex=1,即sex=男
因此,首先设置微信号性别为女

在这里插入图片描述

重新关注微信公众号:发现展示的还是默认菜单
在这里插入图片描述

重新设置微信号性别为男
在这里插入图片描述

重新关注微信公众号,发现由默认菜单更新为个性化菜单
在这里插入图片描述

表明当个性化菜单中sex=1,表示微信号为男性的用户,使用个性化菜单展示,微信号为女的用户还是采用的默认菜单展示
注意:个性化菜单如果创建了,那么就会一直存在,只用使用微信公众号提供的删除个性化菜单接口才可以删除。并且如何有多个个性化菜单,那么会优先执行最后创建的一个


四、删除个性化菜单

删除个性化菜单

http请求方式:POST(请使用https协议)

https://api.weixin.qq.com/cgi-bin/menu/delconditional?access_token=ACCESS_TOKEN

请求示例

{"menuid":"208379533"}

menuid为菜单id,可以通过自定义菜单查询接口获取。

正确时的返回JSON数据包如下,错误时的返回码请见接口返回码说明。:

{"errcode":0,"errmsg":"ok"}

五、测试个性化菜单匹配结果

http请求方式:POST(请使用https协议)

https://api.weixin.qq.com/cgi-bin/menu/trymatch?access_token=ACCESS_TOKEN

请求示例

{"user_id":"weixin"}

user_id可以是粉丝的OpenID,也可以是粉丝的微信号。

返回结果 该接口将返回菜单配置,示例如下:

{
    "button": [
        {
            "type": "view", 
            "name": "tx", 
            "url": "http://www.qq.com/", 
            "sub_button": [ ]
        }, 
        {
            "type": "view", 
            "name": "tx", 
            "url": "http://www.qq.com/", 
            "sub_button": [ ]
        }, 
        {
            "type": "view", 
            "name": "tx", 
            "url": "http://www.qq.com/", 
            "sub_button": [ ]
        }
    ]
}

错误时的返回码请见接口返回码说明。

六、查询个性化菜单

使用普通自定义菜单查询接口可以获取默认菜单和全部个性化菜单信息,请见自定义菜单查询接口的说明。

参考博客:https://blog.csdn.net/qq_29914837/article/details/82928977

七、删除所有菜单

使用普通自定义菜单删除接口可以删除所有自定义菜单(包括默认菜单和全部个性化菜单),请见自定义菜单删除接口的说明。

参考博客:https://blog.csdn.net/qq_29914837/article/details/82948147


本节代码:
微信开发学习总结(四)——自定义菜单(5)——个性化菜单接口——项目源码
下载地址:
https://download.csdn.net/download/qq_29914837/10702945

2017-03-28 16:45:49 incloud_anke 阅读数 296
  • 微信支付开发-微信公众号开发12-微信开发php

    微信公众平台开发之微信支付开发是子恒老师《微信公众平台开发》视频教程的第12部。详细讲解了用php进行微信支付的开发。内容包含获取支付密钥,微信公众号支付开发,扫码支付,微信刷卡支付,异步处理支付结果等等。欢迎反馈,微信/QQ:68183131

    27752 人正在学习 去看看 秦子恒

1.微信开发原理
微信客户端->微信服务器->开发绑定的服务器。
微信开发步骤:
1、填写服务器配置
2、验证服务器地址的有效性
3、依据接口文档实现业务逻辑(入口为公众号后台设置的url)


2.微信验证服务器原理(验证服务器的有效性)
在微信公众后台配置的url和token保存之后会发一个GET请求到我们配置的url上。
并且携带四个参数用来验证签名:
验证签名成功之后把随机字符串返回给微信服务器。即可完成验证。


3.微信开发两种开发模式:

1.消息处理(主动接口、被动接口)
此类开发入口是在后台填写的url (被动接口微信服务器会将消息或者事件主动推送到我们绑定的服务器上)
2.h5页面(类似活动、游戏等要分享朋友圈或者好友来参加的活动)
此类开发主要是为了通过活动等获取粉丝来达到推广和传播的作用,所以第一步要 网页授权 来获得微信用户的openid来记录用户信息,其次要用到jssdk里的分享等接口来达到传播的效果!


4.微信开发access_token的总结

1.接口access_token:
接口调用的access_token。是对接口的认证!
获取方式:http请求方式: GET[https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET](https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET)
2.网页授权access_token(第三方h5页面分享获得用户数据用)
这个access_token是网页授权之后获得的access_token是为了获得授权之后拿到用户数据用的。
这个是微信服务器回调到后台填写的网页授权域名下!不是基本配置里的那个接收数据的那个url
https://mp.weixin.qq.com/wiki/4/9ac2e7b1f1d22e9e57260f6553822520.html


5.网页授权的总结
5.1.网页授权的步骤:

    1、引导用户进入授权页面同意授权,获取code
    2、通过code换取网页授权access_token(与基础支持中的access_token不同)
    3、如果需要,开发者可以刷新网页授权access_token,避免过期
    4、通过网页授权access_token和openid获取用户基本信息(支持UnionID机制)
 ```
5.2网页授权的两种方式 snsapi_base和snsapi_userinfo

1.用户已经关注公众号
snsapi_base:静默授权 得到code和openid 结束
snsapi_userinfo:静默授权 可以通过openid和access_token(可以通过code获取)获取用户数据
2.用户未关注公众号
snsapi_base:静默授权 得到code和openid 结束
snsapi_userinfo:弹出是否同意授权 可以通过openid和access_token(可以通过code获取)获取用户数据


---

>6.jssdk
>6.1 使用步骤:

1.绑定js安全域名(最多三个 支持二级域名 )
2.在页面引入js文件: 如需使用摇一摇周边功能,请引入 jweixin-1.1.0.js
3.配置接口调用权限验证(先获取jsapi_ticket 根据jssdk签名生成算法。)
4.调用对应的jssdk接口

>6.2 jsapi_ticket 和 api_ticket 区别

jsapi_ticket是用来验证jssdk签名。而api_ticket是用来验证jssdk里微信卡券的签名。


---

>7.UnionID机制

1.同一个微信用户在同一个微信公众号下openid是相同的。
同一个微信用户在不用的微信公众号下的openid是不同的。
2.在用户关注下通过openid和接口调用的access_token可以获取到用户的基本信息。
“`

2016-06-20 11:17:41 u012012240 阅读数 665
  • 微信支付开发-微信公众号开发12-微信开发php

    微信公众平台开发之微信支付开发是子恒老师《微信公众平台开发》视频教程的第12部。详细讲解了用php进行微信支付的开发。内容包含获取支付密钥,微信公众号支付开发,扫码支付,微信刷卡支付,异步处理支付结果等等。欢迎反馈,微信/QQ:68183131

    27752 人正在学习 去看看 秦子恒
1.为帮助网页开发者实现与微信客户端一致的视觉体验,并降低设计和开发成本,微信团队推出了网页设计样式库:WeUI。
2.公众平台推出用户标签接口,涉及到的更新包括:用户标签管理、获取用户基本信息(UnionID机制)、个性化菜单接口、高级群发接口等。
3.公众平台发布微信 web 开发者工具,可以在 PC 或 Mac 上模拟访问微信内网页,帮助开发者更方便地进行开发和调试。
4.微信公众平台接口测试账号是为满足公众号开发者了解平台接口能力以及新功能开发上线前进行测试,
  其地址为http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login,本次更新让测试帐号获得了与认证服务号相同的能力,包括JS-SDK相关能力。
5.请注意,网页授权获取用户基本信息也遵循UnionID机制。即如果开发者有在多个公众号,或在公众号、
  移动应用之间统一用户帐号的需求,需要前往微信开放平台(open.weixin.qq.com)绑定公众号后,才可利用UnionID机制来满足上述需求。 
6.WeUI 是一套同微信原生视觉体验一致的基础样式库,由微信官方设计团队为微信内网页开发量身设计,可以令用户的使用感知更加统一。在微信网页开发中使用 WeUI,有如下优势:
  1.同微信客户端一致的视觉效果,令所有微信用户都能更容易地使用你的网站:
  2.便捷获取快速使用,降低开发和设计成本
  3.微信设计团队精心打造,清晰明确,简洁大方
7.微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包。
    通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照、选图、语音、位置等手机系统的能力,同时可以直接使用微信分享、扫一扫、卡券、支付等微信特有的能力,为微信用户提供更优质的网页体验。
8.微信网页支付,地址:http://kf.qq.com/faq/140225MveaUz150413QfuqUz.html
9.微信支付,订单状态:SUCCESS-支付成功,REFUND-转入退款,NOTPAY-未支付,CLOSED-已关闭,REVOKED-已撤销,USERPAYING-用户支付中,PAYERROR-支付失败
10.微信支付系统
微信支付系统是指完成微信支付流程中涉及的API接口、后台业务处理系统、账务系统、回调通知等系统的总称。
11.微信公众平台
微信公众平台是微信公众账号申请入口和管理后台。商户可以在公众平台提交基本资料、业务资料、财务资料申请开通微信支付功能。
12.微信商户平台
微信商户平台是微信支付相关的商户功能集合,包括参数配置、支付数据查询与统计、在线退款、代金券或立减优惠运营等功能。
13.JSAPI网页支付
JSAPI网页支付即前文说的公众号支付,可在微信公众号、朋友圈、聊天会话中点击页面链接,或者用微信“扫一扫”扫描页面地址二维码在微信中打开商户HTML5页面,在页面内下单完成支付。
14.商户订单号
商户支付的订单号由商户自定义生成,微信支付要求商户订单号保持唯一性(建议根据当前系统时间加随机序列来生成订单号)。重新发起一笔支付要使用原订单号,避免重复支付;已支付过或已调用关单、撤销(请见后文的API列表)的订单号不能重新发起支付。
15.时间
标准北京时间,时区为东八区;如果商户的系统时间为非标准北京时间。参数值必须根据商户系统所在时区先换算成标准北京时间, 例如商户所在地为0时区的伦敦,当地时间为2014年11月11日0时0分0秒,换算成北京时间为2014年11月11日8时0分0秒。
16.时间戳

标准北京时间,时区为东八区,自1970年1月1日 0点0分0秒以来的秒数。注意:部分系统取到的值为毫秒级,需要转换成秒(10位数字)。


都是官网的资料,只是进行简单的总结,有个思路,因为官网资料挺多的。

2018-05-31 14:53:23 uziANDkobe 阅读数 140
  • 微信支付开发-微信公众号开发12-微信开发php

    微信公众平台开发之微信支付开发是子恒老师《微信公众平台开发》视频教程的第12部。详细讲解了用php进行微信支付的开发。内容包含获取支付密钥,微信公众号支付开发,扫码支付,微信刷卡支付,异步处理支付结果等等。欢迎反馈,微信/QQ:68183131

    27752 人正在学习 去看看 秦子恒

微信支付开发文档地址:https://pay.weixin.qq.com/wiki/doc/api/index.html
* H5支付是指商户在微信客户端外的移动端网页展示商品或服务,用户在前述页面确认使用微信支付时,商户发起本服务呼起微信客户端进行支付.主要用于手机浏览器请求微信支付的场景,可以方便的从外部浏览器唤起微信支付.
* 微信公众号支付(也JSAPI网页支付)是用户在微信中打开商户的H5页面,商户在H5页面通过调用微信支付提供的JSAPI接口调起微信支付模块完成支付.应用场景有:
1. 用户在微信公众号内进入商家公众号,打开某个主页面,完成支付
2. 用户的好友在朋友圈,聊天窗口等分享商家页面链接,用户点击链接打开商家页面,完成支付
3. 将商户页面转换成二维码,用户扫描二维码后在微信浏览器中打开页面完成支付
* APP支付又称为移动端支付,是商户通过在移动端应用APP中集成开放SDK调起微信支付模块完成支付的模式
* 小程序支付是商户在微信小程序平台内部实现支付的功能.

2015-12-30 09:48:00 sinat_25471067 阅读数 624
  • 微信支付开发-微信公众号开发12-微信开发php

    微信公众平台开发之微信支付开发是子恒老师《微信公众平台开发》视频教程的第12部。详细讲解了用php进行微信支付的开发。内容包含获取支付密钥,微信公众号支付开发,扫码支付,微信刷卡支付,异步处理支付结果等等。欢迎反馈,微信/QQ:68183131

    27752 人正在学习 去看看 秦子恒

做微信支付,登录之前需要 提前注册开发者帐号,创建移动应用。

代码下载路径:http://pan.baidu.com/s/1o7aBxqU  (主要是做笔记,把微信登录以及微信支付整到一起,单独由客户端来完成)

重点注意:

1.参数名称写对,区分大小写

2.唤起微信客户端只弹出“确定”按钮,我这边是因为 支付签名 与 统一下单签名不一致导致。


参考资料:http://www.cocoachina.com/bbs/read.php?tid-309177-keyword-%CE%A2%D0%C5%D6%A7%B8%B6.html




JAVA微信开发总结

阅读数 31

没有更多推荐了,返回首页