获取会员手机号旨在帮助商家便捷获取用户凯发k8官方网娱乐官方的联系方式,在获得用户充分授权和认可,且充分保护用户隐私的前提下快速创建会员体系或开展其它业务。更多能力的介绍,可查看 获取会员手机号。
准入条件
- 开发者需充分尊重用户个人隐私,妥善使用手机号码的使用范围,不得随意打扰用户。若发现信息存在超出约定范围使用或者不合理使用等情况,平台有权永久收回接口权限。
- 为进一步规约和确认安全资质,开发者需加入 ,并严格遵守 支付宝开放平台用户信息处理规范、开放平台第三方应用安全开发指南。
收费模式
免费。
重要说明:
- 代开发模式需服务商引导商家 入驻开放平台 并 创建小程序 应用。
- 服务商代商家申请用户信息前,需代商家 设置 aes 密钥 及 设置小程序主营类目。
- 服务商在小程序端调用 my.getphonenumber 代商家获取用户手机号信息时需传入 isvappid 参数(即第三方应用 appid)。
第一步:创建应用
商家创建小程序应用
代开发模式中服务商需引导商家完成 入驻开放平台 并在开放平台中 创建小程序 应用。
服务商创建第三方应用
- 服务商需为第三方应用配置 接口内容加密方式(即 aes 密钥)。
- 添加功能并完成配置第三方应用后,服务商可发起代开发授权获取商家应用授权。
- 完成授权后,服务商调用接口 alipay.open.app.members.create(应用添加成员)(需传入授权 app_auth_token),添加服务商侧开发人员的支付宝账号为商家小程序应用的开发者。
第二步:代商家配置应用
服务商可通过第三方应用自调用(即不传 app_auth_token)方式代商家设置其小程序应用 接口内容加密方式(即 aes 密钥),用于后续解密手机号。
配置 aes 密钥
设置 aes 密钥
若商家应用未设置 接口内容加密方式(即 aes 密钥)或 aes 密钥需要更新,服务商可调用接口 alipay.open.auth.app.aes.set(授权应用 aes 密钥设置)代商家为其小程序设置或者更新 aes 密钥。可查看 设置/更新 aes 密钥。
注意:
- 服务商在构造 alipayclient 时,构造方法中需传入 encryptkey 和 encrypttype,encryptkey 为当前三方应用的 aes 密钥,encrypttype 为固定值 aes。
- 无需传入 app_auth_token(第三方应用授权令牌)。
- 服务商需谨慎设置或更新商家应用密钥;若商家应用已上线,更新商家应用的密钥可能会影响商家的线上业务。
示例代码(以 java 语言为例)
// encryptkey填入当前第三方应用的aes密钥,encrypttype为"aes" alipayclient alipayclient = new defaultalipayclient("https://openapi.alipay.com/gateway.do","第三方应用appid","第三方应用 private_key","json","gbk","alipay_public_key","rsa2","encryptkey","encrypttype"); alipayopenauthappaessetrequest request = new alipayopenauthappaessetrequest(); request.setbizcontent ("{" //为商家小程序appid "\"merchant_app_id\":\"20191223601234500\"" "}"); request.setneedencrypt(true); alipayopenauthappaessetresponse response = alipayclient.execute(request); if (response.issuccess ()){ system.out.println ( response.getaeskey()); system.out.println ("调用成功"); } else { system.out.println ("调用失败"); }
查询 aes 密钥
若商家小程序已设置 接口内容加密方式(即 aes 密钥),服务商可调用 alipay.open.auth.app.aes.get(授权应用 aes 密钥查询)查询商家小程序的 aes 密钥。详情可查看 查询商家 aes 密钥。
示例代码(以 java 语言为例)
//encryptkey填入当前第三方应用的aes密钥,encrypttype为"aes" alipayclient alipayclient = new defaultalipayclient("https://openapi.alipay.com/gateway.do","第三方应用appid","第三方应用 private_key","json","gbk","alipay_public_key","rsa2","encryptkey","encrypttype"); alipayopenauthappaesgetrequest request = new alipayopenauthappaesgetrequest(); request.setbizcontent ("{" "\"merchant_app_id\":\"20191223601234500\"" //填写需查询密钥的应用appid "}" ); request.setneedencrypt(true); alipayopenauthappaesgetresponse response = alipayclient.execute(request); if (response.issuccess ()){ system.out.println(response.getaeskey()); system.out.println( "调用成功" ); } else { system.out.println( "调用失败" ); }
配置主营行业
申请用户信息前需配置商家小程序主营行业类目,否则无法申请用户信息。
- 服务商可调用 alipay.open.mini.category.query(小程序类目树查询接口),查询商家小程序可用主营行业类目。
示例代码
alipayclient alipayclient = new defaultalipayclient("https://openapi.alipay.com/gateway.do","app_id","your private_key","json","gbk","alipay_public_key","rsa2"); alipayopenminicategoryqueryrequest request = new alipayopenminicategoryqueryrequest(); request.putothertextparam("app_auth_token", "your_app_auth_token"); //授权token request.setbizcontent("{" "\"is_filter\":true" " }"); alipayopenminicategoryqueryresponse response = alipayclient.execute(request); if(response.issuccess()){ system.out.println("调用成功"); } else { system.out.println("调用失败"); }
重要参数说明:
is_filter:是否过滤小程序不可用类目,传入 boolean 值 true。
更多参数及响应详情可查看 alipay.open.mini.category.query(小程序类目树查询)接口文档。
- 服务商可调用 alipay.open.mini.baseinfo.modify(小程序修改基础信息)接口,为商家小程序添加 mini_category_ids(小程序前台类目)即小程序主营行业。
alipayclient alipayclient = new defaultalipayclient("https://openapi.alipay.com/gateway.do","app_id","your private_key","json","gbk","alipay_public_key","rsa2"); alipayopenminibaseinfomodifyrequest request = new alipayopenminibaseinfomodifyrequest(); request.putothertextparam("app_auth_token", "your_app_auth_token");//授权token request.setappname("小程序demo"); request.setappenglishname("demoexample"); request.setappslogan("这是一个小程序示例"); fileitem applogo = new fileitem("c:/downloads/ooopic_963991_7eea1f5426105f9e6069/16365_1271139700.jpg"); request.setapplogo(applogo); request.setappdesc("这是一个小程序的描述这是一个小程序的描述这是一个小程序的描述这是一个小程序的描述"); request.setservicephone("13110101010"); request.setserviceemail("example@mail.com"); request.setminicategoryids("xs1001_xs2001_xs3002;xs1011_xs2089;xs1002_xs2008_xs3024"); alipayopenminibaseinfomodifyresponse response = alipayclient.execute(request); if(response.issuccess()){ system.out.println("调用成功"); } else { system.out.println("调用失败"); }
重要参数说明:
- app_english_name:可选,小程序应用英文名称。若小程序应用未设置该项内容时必传,若小程序应用已设置且无需修改则无需传入。
- app_slogan:可选,小程序应用简介,一句话描述小程序功能。若小程序应用未设置该项内容时必传,若小程序应用已设置且无需修改则无需传入。
- app_desc:可选,小程序应用描述,20~200 个字。若小程序应用未设置该项内容时必传,若小程序应用已设置且无需修改则无需传入。
- service_phone:可选,小程序客服电话。若小程序应用未设置该项内容时必传,若小程序应用已设置且无需修改则无需传入。
- service_email:可选,小程序客服邮箱。若小程序应用未设置该项内容时必传,若小程序应用已设置且无需修改则无需传入。
- mini_category_ids:新小程序前台类目(即主营行业类目),获取会员手机号场景必填。格式为
第一个一级类目_第一个二级类目;第二个一级类目_第二个二级类目_第二个三级类目
。详细类目可以通过 alipay.open.mini.category.query(小程序类目树查询接口)查询 mini_category_list。
更多参数及响应详情可查看 alipay.open.mini.baseinfo.modify(小程序修改基础信息接口)文档。
代申请用户信息
- 按照如下规则拼接地址链接后访问。
https://open.alipay.com/dev/workspace/package-apply/isv/apply?packagecode={产品码}&isvappid={第三方应用appid}&apptype=isvapp
其中 {产品码}
和 {第三方应用appid}
替换为真实的字符串,产品码的值参考如下表格:
申请产品
产品码
app 支付宝登录
app_fast_login
商家会员卡
20161008134238569099
获取会员手机号
20180927110154092444
获取会员信息
20220126151352286986
生活号基础包
20170708140937982162
","id":"blcvb","rows":6,"cols":2,"hideborder":false}" id="blcvb" class="lake-card-margin">申请产品 | 产品码 |
app 支付宝登录 | app_fast_login |
商家会员卡 | 20161008134238569099 |
获取会员手机号 | 20180927110154092444 |
获取会员信息 | 20220126151352286986 |
生活号基础包 | 20170708140937982162 |
说明:获取会员收货地址申请地址格式与以上不同,申请地址为:
https://open.alipay.com/dev/workspace/package-apply/isv/apply?from=privacy&isvappid={第三方应用appid}&packagecode=20190912113406171954。
- 选择需要申请用户信息的商家小程序。
- 选择 api,点击 下一步。
- 阅读了解相关规范,并如实详细填写申请信息。确认无误后,点击 提交申请。
- 审核时长约为 2~3 个工作日,审核通过后可获得该信息字段的权限。可访问上述申请地址,点击 已提交的申请,进入页面后,查看 状态 列,即可获取当前审核状态。
第三步:小程序端开发
服务商帮助商家在小程序开发工具(ide)内完成 获取会员手机号 功能开发,调用 my.getphonenumber 接口时需入参 protocols#isvappid (即第三方应用 appid),再将接口返回的结果通过 my.request 接口传入第三方应用的网关。
my.getphonenumber({ protocols:{ // 小程序模板所属的第三方应用appid isvappid: '第三方应用appid' }, success: (res) => { let encrypteddata = res.response; my.request({ url: '你的服务端地址', data: encrypteddata, }); }, fail: (res) => { console.log(res); console.log('getphonenumber_fail'); }, });
第四步:服务端解密
服务商通过 获取应用 aes 密钥 功能,按照文档指引使用 response.getaeskey()
获取商家小程序的 aes 密钥。后续服务商可通过商家的 aes 密钥解密第三方应用网关收到的返回值,即可代商家解密用户手机号。
解密示例代码如下(java):
更多语言解密及验签示例查看 验签与解密指引。
开发者根据需求获取到用户手机号信息后可用于自身业务。例如:在 商家卡 功能中,用户开取会员卡时自动获取用户手机号信息无需用户手动填写,为用户提供便利、提升用户体验。流程如下(更多场景需开发者根据自身情况接入):
- 开发者调用 alipay.marketing.card.template.create(会员卡模板创建)创建好会员卡模板;
- 用户授权商家获取其手机号场景下开发者可调用 alipay.marketing.card.formtemplate.set(会员卡开卡表单模板配置接口)配置该模板,无需用户手动填写手机号。
示例代码:
alipaymarketingcardformtemplatesetrequest request = new alipaymarketingcardformtemplatesetrequest(); request.putothertextparam("app_auth_token", "your_app_auth_token"); //授权token request.setbizcontent("{" //会员卡模板id。使用会员卡模板创建接口(alipay.marketing.card.template.create)返回的结果 "\"template_id\":\"20200507000000002285737000300291\"," "\"fields\":{" "\"required\":\"{\\\"common_fields\\\":[\\\"open_form_field_name\\\",\\\"open_form_field_city\\\"]}\"," "\"optional\":\"{\\\"common_fields\\\":[\\\"open_form_field_gender\\\",\\\"open_form_field_email\\\",\\\"open_form_field_mobile\\\"]}\"" "}" "}"); alipaymarketingcardformtemplatesetresponse response; try { response = alipayclient.execute(request); if(response.issuccess()){ system.out.println("调用成功"); system.out.println(response.getbody()); } else { system.out.println("调用失败"); } } catch (alipayapiexception e) { // todo auto-generated catch block e.printstacktrace(); }
- 配置完成后开发者需调用 alipay.marketing.card.activateurl.apply(获取会员卡领卡投放链接接口)传入 callback(领卡表单页面成功回调地址)参数,生成该会员卡模板领卡链接 apply_card_url ,在小程序端通过 支付宝卡包插件 唤起开卡页面。
说明:callback 为单纯的服务端接收回调,无需额外配置。用于接收支付宝 get 方式推送的 auth_code
(用户获取授权码)及 request_id
(申请 id) 信息,用于后续开卡。
- 用户填写完信息提交开卡申请后,开发者调用 alipay.marketing.card.activateform.query(查询用户提交的会员卡表单信息接口)获取填写信息,连同用户授权后获取到的手机号信息一同传入 alipay.marketing.card.open(会员卡开卡接口)中完成会员卡开卡操作。用户即使不填写手机号会员卡中也会附带会员手机号信息。
开卡接口示例代码如下:
alipaymarketingcardopenrequest request = new alipaymarketingcardopenrequest(); request.putothertextparam("app_auth_token", "your_app_auth_token"); //授权token request.setbizcontent("{" "\"out_serial_no\":\"202006120000002545454\"," // 外部商家流水号(商家需要确保唯一性控制,类似request_id唯一请求标识) "\"card_template_id\":\"20191126000000002143823000300299\"," "\"card_user_info\":{" //20880016667403408024050432912929 "\"user_uni_id\":\"2088531802445291\"," "\"user_uni_id_type\":\"uid\"" "}," "\"card_ext_info\":{\"external_card_no\":\"demo001\","// 商家会员卡卡号 "\"open_date\":\"2019-10-08 14:20:00\",\"valid_date\":\"2022-02-20 21:20:46\",\"level\":\"vip1\",\"point\":\"88\",\"balance\":\"124.89\"}," "\"member_ext_info\":{\"name\":\"支小宝\",\"city\":\"杭州\",\"cell\":\"18111111111\"}}"); alipaymarketingcardopenresponse response; try { //accesstoken response = alipayclient.execute(request,"composeb2c5a108b82d14e39945c493959703d29"); if(response.issuccess()){ system.out.println(response.getbody()); system.out.println("调用成功"); } else { system.out.println("调用失败"); } } catch (alipayapiexception e) { // todo auto-generated catch block e.printstacktrace(); }