## 1 my.paySignCenter(Object object) **支付宝客户端** 10.0.18 或更高版本; 若版本较低,建议采取 [兼容处理](https://ideservice.alipay.com/cms/site/038x6t) 。
**支小宝客户端 **支持
**安诊儿客户端 **支持
**小程序开发者工具:** 不支持。
**主体:** 企业支付宝小程序 # 2 简介 唤起周期扣款签约页面。
有关周期扣款的签约流程、使用场景、服务端请求参数等信息,请查阅 [周期扣款产品说明](https://ideservice.alipay.com/cms/site/00a059)。 ## 2.1 效果示例 周期扣款签约页面效果示例
默认标题0
![](https://mdn.alipayobjects.com/afts/img/A*8DunT7z4THAAAAAAQvAAAAgAeq8wAA/original?bz=openpt_doc&t=m-198CpKV4QBbLXKYhUiAuZuhbC1E8uCcsyV5KuB1_wDAAAAZAAAMK8AAAAA#__spacing=both&clientId=u3b4f0f0e-9f3f-4&from=paste&id=u345a0e55&originHeight=1130&originWidth=532&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=none&taskId=u4ef07830-e838-46b5-a4f5-b49610ccf2c&title=)
默认标题1
![](https://mdn.alipayobjects.com/afts/img/A*i71gRYBGCWkAAAAAQrAAAAgAeq8wAA/original?bz=openpt_doc&t=HUJjswO83ziyAgvqouny7FYFpOArfgQpbgh4fyUW5tEDAAAAZAAAMK8AAAAA#__spacing=both&clientId=u3b4f0f0e-9f3f-4&from=paste&id=u53f455ac&originHeight=1134&originWidth=532&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=none&taskId=u9dc1d186-a080-4583-b530-13b2d93cc25&title=) # 3 接入流程 ## 3.1 周期扣款签约流程 为了确保准确接入**“周期扣款签约流程”**的能力, 需要按照 开发设置 > 绑定商家账号 > 开通产品 > 获取 signStr > **API调用** > 获取签约结果 的流程接入。 ### 开发设置(开放平台) **是否必须:** 是。
使用 **主账号** 登录 [开放平台](https://open.alipay.com/develop/manage) ,选择当前开发的小程序,根据下面的说明进行相关开发配置: - 接口加签方式:必填 - 应用网关:必填 - 支付宝网关:必填 - 接口内容加密方式:选填,建议配置 - 服务器IP白名单:选填,涉及到敏感操作时建议配置 具体可参考文档 [开发设置](https://ideservice.alipay.com/cms/site/00a05a)。 ### 绑定商家账号(商家平台) **是否必须:** 是。
在支付宝开放平台创建的应用归属于对应的开放平台账号。如果要在应用中使用支付和资金等相关产品,需要将应用和支付宝商家平台账号绑定,应用才可调用需要商家开通的产品,具体步骤可查看 [绑定应用](https://ideservice.alipay.com/cms/site/0128wr)。 ### 开通产品(商家平台) **是否必须:** 是。
在 [商家平台——产品中心](https://b.alipay.com/page/product-workspace/all-product) 列表中搜索并为当前小程序开通 **周期扣款** 产品。 ### 获取 signStr(服务端) **是否必须:** 是。
集成并配置服务端 SDK,通过 SDK 调用服务端接口 [支付宝个人协议页面签约接口(alipay.user.agreement.page.sign)](https://ideservice.alipay.com/cms/site/0j01kk) 获取 signStr。 1. 下载对应语言版本的最新版 [服务端 SDK](https://ideservice.alipay.com/cms/site/02n6z6) 并引入开发工程,用于后续的服务端接口调用。 2. 在 SDK 调用具体的接口前需要进行 AlipayClient 对象初始化。AlipayClient 对象只需要初始化一次,后续调用不同的接口都可以使用同一个 alipayClient 对象。具体可参考文档 [接口调用配置](https://ideservice.alipay.com/cms/site/00a05a)。 3. 通过服务端调用 [alipay.user.agreement.page.sign](https://ideservice.alipay.com/cms/site/0j01kk) 获取 signStr,具体可参考文档 [创建签约协议内容](https://ideservice.alipay.com/cms/site/00a05b)。 **注意:** - 调用 alipay.user.agreement.page.sign 生成用于 my.paySignCenter 的 signStr 时,无需传入 return_url(传入也会被忽略);若开发者希望在签约成功后跳转到其他页面,请在 my.paySignCenter 的 success 回调中进行。 - 需要对 alipay.user.agreement.page.sign 接口返回的内容进行 URL encode,才能得到适用于 my.paySignCenter 的 signStr。 ### API调用(小程序) **是否必须:** 是。
在小程序中调用 API,传入参数 signStr 唤起周期扣款签约页面。 ### 获取签约结果(小程序) **是否必须:** 是。
根据 my.paySignCenter 的 success 回调的结果进行进一步处理。回调参数结构可参考 success 参数,字段含义参考 success 回调函数说明。 # 4 入参 ## 4.1 Object object 查看示例 | **属性** | **类型** | **默认值** | **必填** | **描述** | | --- | --- | --- | --- | --- | | signStr | String | - | 是 | 签约字符串,可查看 [周期扣款接入指南](https://ideservice.alipay.com/cms/site/00a05b) 来获取该字符串 | | success | Function | - | 否 | 调用成功的回调函数 | | fail | Function | - | 否 | 调用失败的回调函数 | | complete | Function | - | 否 | 调用结束的回调函数(调用成功、失败都会执行) | ## 4.2 success 回调函数 ### 4.2.1 参数 #### Object res 查看示例 | | **属性** | **类型** | **描述** | | --- | --- | --- | --- | | | result | String | 签约结果(如需该字段内部参数,切记先 `JSON.parse` 一下)`JSON.parse` 后的对象结构如下:
`sign`,类型 `string`,签名
`sign_type`,类型 `string`,签名算法类型
`alipay_user_agreement_page_sign_response`,类型 `object` | | | resultStatus | String | 签约结果码 | | | | | | | **枚举值** | **描述** | **兼容性** | | | 7000 | 协议签约成功 | - | | | 7001 | 签约结果未知(有可能已经签约成功)。
**解决方案:**可通过服务端调用 alipay.user.agreement.query 查询签约状态,具体可参考文档 [周期扣款协议查询](https://ideservice.alipay.com/cms/site/041bxs) | - | | | 7002 | 协议签约失败。
**解决方案:**
- 请检查小程序是否开通了对应的产品,
- 请检查调用 [alipay.user.agreement.page.sign](https://ideservice.alipay.com/cms/site/0j01kk)(支付宝个人协议页面签约接口)时的参数是否正确。常见排查思路:
- 检查 product_code 和 personal_product_code 这两个参数是否传了正确的值,是否传反,传值是否符合[文档要求](https://ideservice.alipay.com/cms/site/0j01kk)。
- 检查扣款金额是否符合周期扣款额度限制,对每个用户的单笔扣款不超过 100 元,当日扣款不超过 1000 元,当月扣款不超过 30000 元,扣款周期最短为 7 天(最长没有限制)。
| - | | | 6001 | 用户中途取消 | - | | | 6002 | 网络连接错误。
**解决方案:**检查网络连接后重试 | - | | # 5 代码示例 ## my.paySignCenter(Object object) ``` my.paySignCenter({ signStr: 'alipay_sdk%3Dalipay-sdk-java-dynamicVersionNo%26app_id%3D2019072465924554%26biz_content%3D%257B%2522sign_validity_period%2522%253A%25222m%2522%252C%2522product_code%2522%253A%2522CYCLE_PAY_AUTH%2522%252C%2522external_logon_id%2522%253A%252213852852877%2522%252C%2522personal_product_code%2522%253A%2522CYCLE_PAY_AUTH_P%2522%252C%2522sign_scene%2522%253A%2522INDUSTRY%257CCARRENTAL%2522%252C%2522external_agreement_no%2522%253A%2522test%2522%252C%2522third_party_type%2522%253A%2522PARTNER%2522%252C%2522prod_params%2522%253A%257B%2522auth_biz_params%2522%253A%2522%257B%255C%2522platform%255C%2522%253A%255C%2522taobao%255C%2522%257D%2522%257D%252C%2522promo_params%2522%253A%2522%257B%255C%2522key%255C%2522%253A%255C%2522value%255C%2522%257D%2522%252C%2522access_params%2522%253A%257B%2522channel%2522%253A%2522ALIPAYAPP%2522%257D%252C%2522merchant_process_url%2522%253A%2522https%253A%252F%252Fwww.merchantpage.com%252Findex%253FprocessId%253D2345678%2522%252C%2522identity_params%2522%253A%257B%2522user_name%2522%253A%2522%25E5%25BC%25A0%25E4%25B8%2589%2522%252C%2522cert_no%2522%253A%252261102619921108888%2522%252C%2522identity_hash%2522%253A%25228D969EEF6ECAD3C29A3A629280E686CF0C3F5D5A86AFF3CA12020C923ADC6C92%2522%252C%2522sign_user_id%2522%253A%25222088202888530893%2522%257D%252C%2522agreement_effect_type%2522%253A%2522DIRECT%2522%252C%2522user_age_range%2522%253A%2522%257B%255C%2522min%255C%2522%253A%255C%252218%255C%2522%252C%255C%2522max%255C%2522%253A%255C%252230%255C%2522%257D%2522%252C%2522period_rule_params%2522%253A%257B%2522period_type%2522%253A%2522DAY%2522%252C%2522period%2522%253A9%252C%2522execute_time%2522%253A%25222022-05-23%2522%252C%2522single_amount%2522%253A10.99%252C%2522total_amount%2522%253A600%252C%2522total_payments%2522%253A12%257D%257D%26charset%3DUTF-8%26format%3Djson%26method%3Dalipay.user.agreement.page.sign%26sign%3Di8X5tQSVx%252Bj8UviKuGDz5Wc8lPf%252BBtOTzlEN2N60%252FFQp%252Fgk4pubIhMzq8duIyapCVJR74lE3GFIUHrTrvcMnaTFCyLp5gRWRQFWxxunAFEMvtSLA2HUbz7tnbg49o2aMHzpYLWgEtBDSR1yl8nLSNefm4iJ46evEFX4pNC%252FdXhW3PVWaOx6d8jIjEvTkaWBpYBG%252F%252BrFmS08xfMqR58hsWDAp7x7y7emgjEfVMmTQmKhLBY8BSfXrv%252BMX%252FwD5joOToloHpKVfhjeuHcpcmyPhLjX7SPpw9xaNnmEJa9ACrXhWk440Y9XT8XiB%252F68fRfPC%252FcU14kEiob5UK5AMwYnj3Q%253D%253D%26sign_type%3DRSA2%26timestamp%3D2022-04-22%2B11%253A04%253A20%26version%3D1.0', success: function(res) { console.log(res); }, fail: function(err) { console.log(err); } }); ``` ## success 参数 ``` { "result": "{\"alipay_user_agreement_page_sign_response\":{\"code\":\"10000\",\"msg\":\"Success\",\"app_id\":\"2017060101317939\",\"auth_app_id\":\"2017060101317939\",\"charset\":\"UTF-8\",\"timestamp\":\"2017-06-27 11:40:15\",\"sign_scene\":\"INDUSTRY|CARRENTAL\",\"valid_time\":\"2017-06-27 11:40:13\",\"status\":\"NORMAL\",\"external_agreement_no\":\"test212\",\"agreement_no\":\"20170627457298962889\",\"external_logon_id\":\"13852852877\",\"alipay_logon_id\":\"138****2877\",\"invalid_time\":\"2017-08-27 11:40:13\",\"personal_product_code\":\"GENERAL_WITHHOLDING_P\",\"sign_time\":\"2017-06-27 11:40:14\",},\"sign\": \"KgeHoSYPuhpzhfrjeuwWbRmjJtlUp+5UGfq2OxYLraWEOqKsw9FokUnodMEgKgJK8=\",\"sign_type\":\"RSA\"}", "resultStatus": "7000" } ``` # 6 Bugs & Tips - Tip不支持在 IoT 小程序中使用。 - Tip关于周期扣款的常见问题可点击 [周期扣款常见问题](https://ideservice.alipay.com/cms/site/00a05d) 查看。 # 7 常见问题 ## 7.1 Q:如何获取签约字符串? A:
调用 [alipay.user.agreement.page.sign](https://ideservice.alipay.com/cms/site/0j01kk)(支付宝个人协议页面签约接口)传入周期扣款约定等相关信息创建签约协议内容,将返回内容进行一次 url encode 后做为 signStr 的值传入 my.paySignCenter。示例以及详细信息可查看 [创建签约协议内容](https://ideservice.alipay.com/cms/site/00a05b)。 ## 7.2 Q:唤起的开通界面显示“无效签名”,如何处理? A:
请检查传入的 signStr 是否正确。请对照以下内容进行自查:
传入的 signStr 需要形如:`alipay_sdk%3Dalipay-sdk-java-dynamicVersionNo%26app_id%3D2019072465924554%26biz_content%3D...`。如果是使用 SDK 获取的 signStr,得到的是这样的字符串:`alipay_sdk=alipay-sdk-java-dynamicVersionNo&app_id=2019072465924554&biz_content=...` ,需要先将这段字符串进行一次 urlencode。使用 Java SDK 示例代码如下: ``` AlipayUserAgreementPageSignResponse response = alipayClient.sdkExecute(request); String signStr = URLEncoder.encode(response.getBody(), "UTF-8"); ``` ## 7.3 Q:开通失败常见原因有哪些?回调提示报错 7002 如何处理? A:
可能是小程序未开通 **周期扣款** 产品,亦可能是 alipay.user.agreement.page.sign 传参问题,请参考错误码 7002 的解决方案。