1 微信授权登陆

  1) 配置授权回调页面域名

    公众号开发平台->开发者中心->网页帐号->网页授权获取用户基本信息

  2) 用户授权并获取code

    https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

参数

必须

说明

appid


公众号的唯一标识

redirect_uri


授权后重定向的回调链接地址

response_type


返回类型,请填写code

scope


应用授权作用域,snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且,即使在未关注的情况下,只要用户授权,也能获取其信息)

state


重定向后会带上state参数,开发者可以填写任意参数值

#wechat_redirect


直接在微信打开链接,可以不填此参数。做页面302重定向时候,必须带此参数

    授权后重定向到 REDIRECT_URI?code=****

  3) 根据code获取access_token、openId等用户信息

    https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code    

参数

是否必须

说明

appid


公众号的唯一标识

secret


公众号的appsecret

code


填写第一步获取的code参数

grant_type


填写为authorization_code

 

    返回:

参数

描述

access_token

网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同

expires_in

access_token接口调用凭证超时时间,单位(秒)

refresh_token

用户刷新access_token

openid

用户唯一标识,请注意,在未关注公众号时,用户访问公众号的网页,也会产生一个用户和公众号唯一的OpenID

scope

用户授权的作用域,使用逗号(,)分隔

 

  4) 使用access_token、openId获取用户信息

    https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID    

参数

描述

access_token

网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同

openid

用户的唯一标识

    返回:

参数

描述

openid

用户的唯一标识

nickname

用户昵称

sex

用户的性别,值为1时是男性,值为2时是女性,值为0时是未知

province

用户个人资料填写的省份

city

普通用户个人资料填写的城市

country

国家,如中国为CN

headimgurl

用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空

privilege

用户特权信息,json 数组,如微信沃卡用户为(chinaunicom)

2 调用微信js接口

  微信开发文档说access_token的有效时间是7200秒(两小时);
但没有说过期后怎么办,这里的access_token容易和网页授权的access_token搞混;
后者有刷新地址,前者没有,需要过期后重新获取;
一般做网站开发,必须把access_token和jsapi_ticket存到服务器,并且根据过期时间定期更新,这个后期再说;

  1) 获取access_token

    https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=SECRET

  2) 获取临时票据 jsapi_ticket

    https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi

3 微信公众号支付

  1) 设置支付目录

    确保实际支付时的请求目录与此处配置的目录一致,否则将无法成功唤起微信支付。

    微信商户平台(pay.weixin.qq.com)-->产品中心-->开发配置

    

微信开发者工具项目配置域名信息怎么设置_公众号

  2) 设置授权域名

    开发公众号支付时,在统一下单接口中要求必传用户openid,可在用户授权登陆时获取,需要配置网页授权域名(参:微信授权登陆)

  3) js调起支付

    getBrandWCPayRequest 接口

名称

变量名

必填

类型

示例值

描述

公众号id

appId


String(16)

wx8888888888888888

商户注册具有支付权限的公众号成功后即可获得

时间戳

timeStamp


String(32)

1414561699

当前的时间,其他详见时间戳规则

随机字符串

nonceStr


String(32)

5K8264ILTKCH16CQ2502SI8ZNMTM67VS

随机字符串,不长于32位。推荐随机数生成算法

订单详情扩展字符串

package


String(128)

prepay_id=123456789

统一下单接口返回的prepay_id参数值,提交格式如:prepay_id=***

签名方式

signType


String(32)

MD5

签名类型,默认为MD5,支持HMAC-SHA256和MD5。注意此处需与统一下单的签名类型一致

签名

paySign


String(64)

C380BEC2BFD727A4B6845133519F3AD6

签名,详见签名生成算法

    支付接口err_msg返回结果值:

返回值

描述

get_brand_wcpay_request:ok

支付成功

get_brand_wcpay_request:cancel

支付过程中用户取消

get_brand_wcpay_request:fail

支付失败

    由于前端交互复杂,取消和失败流程可以统一处理,不必细分。

    代码示例:

function onBridgeReady(){
   WeixinJSBridge.invoke(
       'getBrandWCPayRequest', {
           "appId":"wx2421b1c4370ec43b",     //公众号名称,由商户传入     
           "timeStamp":"1395712654",         //时间戳,自1970年以来的秒数     
           "nonceStr":"e61463f8efa94090b1f366cccfbbb444", //随机串     
           "package":"prepay_id=u802345jgfjsdfgsdg888",     
           "signType":"MD5",         //微信签名方式:     
           "paySign":"70EA570631E4BB79628FBCA90534C63FF7FADD89" //微信签名 
       },
       function(res){     
           if(res.err_msg == "get_brand_wcpay_request:ok" ) {}     // 使用以上方式判断前端返回,微信团队郑重提示:res.err_msg将在用户支付成功后返回    ok,但并不保证它绝对可靠。 
       }
   ); 
}
if (typeof WeixinJSBridge == "undefined"){
   if( document.addEventListener ){
       document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);
   }else if (document.attachEvent){
       document.attachEvent('WeixinJSBridgeReady', onBridgeReady); 
       document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);
   }
}else{
   onBridgeReady();
}

4 获取access_token接口时,需要设置访问来源IP为白名单

微信分享时,发现报错

错误代码-40164,错误信息-invalid ip, not in whitelist hint: [59FKqA0797e514]]

登录公众平台,进入开发->基本配置页面->IP白名单配置