目录

支付宝小程序开发java服务

目录

支付宝小程序开发+java服务

1开发者入驻

支付宝小程序是一种全新的开放模式,它运行在支付宝客户端,是手机应用嵌入支付宝客户端的一种方法。支付宝小程序开放给开发者更多的 JS API 和 OpenAPI,也可以提供给用户多样化的便捷服务。支付宝小程序可以被便捷地获取和传播,从而为终端用户提供更优的用户体验。

支付宝小程序对企业账号及个人账号开放。创建小程序前需要完成注册和入驻成为小程序开发者。

1.1注册支付宝企业账户

注册流程:

https://i-blog.csdnimg.cn/blog_migrate/da163a4423107c25767e6c26dd128d85.png

注册地址:https://memberprod.alipay.com/account/reg/enterpriseIndex.htm

https://i-blog.csdnimg.cn/blog_migrate/54a005770cc6be2a97315da91d126950.png

1.2入驻

1.2.1使用企业支付宝账号登录 支付宝开放平台。

https://i-blog.csdnimg.cn/blog_migrate/736206a4c668c008d420b44b914c8c88.png

1.2.2选择入驻身份

目前小程序支持三种身份:自研开发者、系统服务商 ISV、线下服务商(仅限企业用户)。根据身份可进行相应的业务,不同的身份提供了不同的功能权限,您可根据实际情况选择,详情参考身份说明。

自研开发者:自己来开发小程序,开发者直接为用户提供服务。

系统服务商 ISV:服务商为商家提供服务,生产小程序模板或代商家开发小程序,模板可发布到服务市场,商家在服务市场来订购模板。

线下服务商:无需开发能力即可在支付宝开放平台上进行业务推广,如:收钱码、红包码等。

注释:官方文档地址https://docs.alipay.com/mini/introduce/register#9f565d99

2创建小程序

在开发者入驻中,已完成了注册和入驻流程。通过以下步骤将创建小程序,并获取 APPID。

2.1创建小程序

2.1.1 支付宝程序首页

https://i-blog.csdnimg.cn/blog_migrate/4384efe77759f60348025a4769f47ee5.png

注意:

一个开发者账号下最多可以创建 10 个小程序。

未曾提交审核的小程序可以删除,删除的小程序不在计数范围。

进入小程序首页,点击立即接入,使用支付宝账号登录,进入我的小程序。

若账号从未创建过小程序,点击开始创建,填写小程序相关信息,完成创建流程。

https://i-blog.csdnimg.cn/blog_migrate/6e5759e97292481649ad2e48ad8b954d.png

若账号有已创建的小程序,点击创建来创建新的小程序。

https://i-blog.csdnimg.cn/blog_migrate/be99ea185c6cbf51e48a20e9bd3421f8.png

2.2填写基本信息并提交

填写小程序名称(参见小程序应用名称规范),即可快速创建小程序;其他信息可在研发过程中或提审时补充完整,也可在创建时填写完整的小程序基本信息。

准确填写小程序的基本信息,基本信息需符合小程序审核规范 。

小程序信息修改规则如下:

上架前,小程序信息均可修改,不限次数。

上架后,小程序名及小程序英文名均不允许修改。

小程序简介、小程序描述、小程序类目这三个信息在新版本提审时可修改,但每个自然月仅可修改 5 次;其他信息在新版本提审时均可修改。

https://i-blog.csdnimg.cn/blog_migrate/29f15bfcde7d2be0e38c5b75755b78e7.png

3小程序开发配置

在支付宝小程序应用列表页面点击查看按钮,进入小程序应用页面开始开发配置。

3.1配置开发管理模块

该功能模块页面,主要用来添加小程序应用功能。如下图所示;

https://i-blog.csdnimg.cn/blog_migrate/934d5340ebbde63485b60c90332536b8.png

注:根据小程序功能需求,点击添加功能按钮添加功能。如下图所示;

https://i-blog.csdnimg.cn/blog_migrate/38303d644cfe0406be66efe9cd89f824.png

5 java项目应用实例

5.1配置支付宝服务环境常量

https://i-blog.csdnimg.cn/blog_migrate/2264f77e72f82ff317273fa3da4382f2.png

5.1.1 支付宝公钥

登录开放平台-开发者中心,选择小程序,找到对应的小程序,点击查看,找到开发设置-接口加签方式,点击查看支付宝公钥,将该处支付宝公钥复制粘贴。

/**支付宝公钥-从支付宝生活号详情页面获取*/
public static final String ALIPAY_PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAu1V5vI8zK0uvA8En9bcCn7sMTd2iNKWyIiDnD/A2Q2snx/iI3q06AGDRJZPOhJQeg1vmtSdSD6qj330WfYfpnMdHFGsOpfcTo+aP99hNu+Dms4oA2lLeO0lM9uMFjfS5iOdbAH1Jddsi8PQzP8FIODho4G4rKs6+d/tIYyJrYgFsi+wskoZNaqpXBcnFiQ+LRWwM11FebOpQxBv0sfMbhycLylQ4ZKeg+BrNVI/W8UPDHwHC1QYGFAA8WjWMBBK+7o7rI+JMO9PKDodxDpFLs5rleFh

5.1.2 服务窗APP_ID

登录开放平台-开发者中心选择小程序,找到对应的小程序,点击查看。如下图所示。

https://i-blog.csdnimg.cn/blog_migrate/ebc0e8742b7f32ff41f3042c07149462.png

5.1.3 服务私钥和公钥

该私钥和公钥是在设置支付宝应用公钥时生成的那一对。

//注:该私钥为测试账号私钥开发者必须设置自己的私钥 , 否则会存在安全隐患
public static final String PRIVATE_KEY= "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC61ddV9IGZPFpJ51l08srLUD381SwiTsoEEFFtkiZ2WVoOKj0O29onDFntrYfYgepq8CXHMSMByBWh9AIrwWGDZsHlpDzxK82XNn/OITM/HOHV3+BXUrwEunN598uw8M1tM/GBYo9W7T7kVMpQ//FJe47X1GVZuN4gh51yhLiHMRqnk4FwAWNS+rbo7Ys533TMKoDI6wza25hwn3j38v3NnRovIzkkdVn0w5uBq1rz3cBMcMY0wB6/qT/LVHE2dRXMXqw0nSSe+Dh5YcgLW8eh5SDcL4dns9Y+t+F+TOkPquJSWGf917Fzwx81gz3lPyGjjkWxq96OuWTAgMBAAECggEANwtBQcWjWO36+8L5DAdrz7J4UMDNG95yjffwxYNFaaCxc3LmQjZrcw2kgO2bFCJSWeceeizzz1aPaQNmkFWM0RW5ElrsyXDKRT59MNF/M5zivAwVICTz18DGvKxQinSnUQD4qdHLwSRsXwDMCkkdYTTRxKyCn4hjiNnrfQ20/77q4XtHotfdJ9pH894tbwk9HWooGZWeZJqplmlFa49Xx2y/ZhLk4SH+Yza6BGbR/+zhRz2EkCAXewWfGdMs90Ij0xoFZqh9T6VE3uYPiJvr0T9faRL20v0x+ZXCu2D83Xjy/eQbiNiZ3Jc57nQQfsZiMQb2ZfhgNHSNmQ9CT6G2YQKBgQDfrgBN8+kk+U1kHMIGJ8HripEUt4e0lfu4qT5k6L/4w5cAjNGc/Ad3afQRlsFNH7zGpNBod6Skx1YrKmLJ65IdelrEG/dLZtQl9OHfovpHO/68gBL99c1XdrFUfCt0Su6PY40bdF3zmZ3hhcEene2N2BB0UP9CPmRcEeQPIsiAjwKBgQDV1PPDVzBf30ea1/fz2EWTWcr9YyUwJSVElYqbZMml247knVsrkHIiU8xyRow0B8y9WjYWLDT906momoyw3A4nFK6sNfN9/05jLn2zfxZK0TNWTLMoXW24w8lKilQMXOwMn65biw96Mce82SoemZpPFDx0kxWQ9ON1a5pLgBJEvQKBgDM5BZjUYm+1J6Plcgk20ZG/CbpUzR7tuddv6nnxUwUExW+6z8XDcXJHMT1V6K5gtjpHQ/Koc2vIulLoQfc7mxplCqQeQ2NhCPQoQBGWoPnvI0bHjZHa2EtPQwy14r2e60Kq6YWAAIPoid87Yh5AzEXPVPVOFyZ0Y0cyUaelr4TBAoGBAND7vn2UkgexHbddCc18+orHgFdi9a53L1Q3Xu7+cwGxcpdGnxsVoiaghbjN8CrN0LDjIOdMr0HAAxlwar5TY1WYphpS5DWpNsBCaMHsHCplCWp3rcVuglTIrMs4JGqsylqQGYUIhMjlLBQKnlqnvqM44NkCA1rXrBJPZs4RTkl1AoGAR783yRRkei1sYQ9BOE23kWP+NhVsTtCEQl8O0+7KY9d8VALqD4WDlckkoomXzGRuHgkxSZq92RC3edDMMIstqS0KB59KxNECMvVGBq91sbciB60E2wN1LumNjI082HVu8rai5wwkG1e712p2IZ8qEGGwSk+HwyVc6UqX8nJgydo=";
//注:该公钥为测试账号公钥开发者必须设置自己的公钥 ,否则会存在安全隐患
public static final String PUBLIC_KEY= "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAutXXVfSBmTxaSedZdPLKy1A9/NUsIk7KBBBRbZImdllaDio9DtvaJwxZ7a2H2IHqavAlxzEjAcgVofQCbB5aQ88SvNlzZ/ziEzPxzh1d/gV1K8BLpzeffLsPDNbTPxgWKPVu0+5FTKUP/xSXuO19RlWbjeIIedcoS4hzEap5OBcAFjUvq26O2LOd90zCqAyOsM2tuYcJ949/L9zZ0aLyM5JHVZ9MObgata893ATHDGNMAev6k/y1RxNnUVzF6sNJ0knvg4eWHIC1vHoeUg3C+HZ7PWPrfhfkzpD6riUlk8g0Y4CGbRn/dexc8MfNYM95T8ho45FsavejrlkwIDAQAB";

5.2实例化支付宝客户端

AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", APP_ID, APP_PRIVATE_KEY, "json", CHARSET, ALIPAY_PUBLIC_KEY, "RSA2");

注:

AlipayClient 的实现类都是线程安全的,所以没有必要每次 API 请求都新建一个 AlipayClient 实现类;

创建 AlipayClient 实现类的实例时,指定 format=json,相比 xml 格式,可以减少数据传输量,提升 API 请求效率。

https://i-blog.csdnimg.cn/blog_migrate/24e3ffb13fd80fe71887d84784998d07.png

5.3调用支付宝API接口

5.3.1流程规则

1、实例化客户端

例AlipayClient alipayClient = new DefaultAlipayClient(“https://openapi.alipay.com/gateway.do”, APP_ID, APP_PRIVATE_KEY, “json”, CHARSET, ALIPAY_PUBLIC_KEY, “RSA2”);

2、实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:

alipay.open.public.template.message.industry.modify ;

例AlipayOpenPublicTemplateMessageIndustryModifyRequest request = new AlipayOpenPublicTemplateMessageIndustryModifyRequest();

3、//SDK已经封装掉了公共参数,这里只需要传入业务参数,此次只是参数展示,未进行字符串转义,实际情况下请转义;

例request.setBizContent(" {" +

" “primary_industry_name”:“IT科技/IT软件与服务”," +

" “primary_industry_code”:“10001/20102”," +

" “secondary_industry_code”:“10001/20102”," +

" “secondary_industry_name”:“IT科技/IT软件与服务”" +

" }");

4、//执行API请求

例AlipayOfflineMaterialImageUploadResponse response = alipayClient.execute(request);

5、//调用成功,则处理业务逻辑

例 if(response.isSuccess()){ //… }

5.4获取会员信息

public void loginCheck(String authCode,HttpServletRequest request,HttpServletResponse httpServletResponse) {
        String alipayUserInfo = "";
        // 1. 服务端获取access_token、user_id
        AlipaySystemOauthTokenResponse response = null;
        try {
            response = getAccessToken(authCode);
            if (response.isSuccess()) {               
/**
                 *  获取到用户信息后保存到数据
                 *  1. 如果数据库不存在对用的 alipayUserId, 则注册
                 *  2. 如果存在,则获取数据库中的信息再返回
                 */
                String accessToken = response.getAccessToken();
                String alipayUserId = response.getUserId();            
                // 获取会员信息
                AlipayUserInfoShareResponse aliUserInfo = getAlipayUserInfo(accessToken);
                }
            } else {
                System.out.println("获取access_token - 调用失败");
            }
        } catch (Exception e) {
            System.out.println("获取用户信息失败:"+e);
        }
}
 
// 获取access_token、user_id
    private AlipaySystemOauthTokenResponse getAccessToken(String authCode) throws Exception {
        AlipayClient alipayClient = AlipayAPIClientFactory.getAlipayClient();
        AlipaySystemOauthTokenRequest request = new AlipaySystemOauthTokenRequest();
        //值为authorization_code时,代表用code换取;值为refresh_token时,代表用refresh_token换取
        request.setGrantType(AlipayServiceEnvConstants.GRANT_TYPE);
        request.setCode(authCode);        // 4. 填入前端传入的授权码authCode
        request.setRefreshToken("201208134b203fe6c11548bcabd8da5bb087a83b");
        AlipaySystemOauthTokenResponse response = alipayClient.execute(request);
        return response;
    }
// 获取支付宝用户信息
    private AlipayUserInfoShareResponse getAlipayUserInfo(String accessToken) throws Exception {
        AlipayClient alipayClient = AlipayAPIClientFactory.getAlipayClient();
        AlipayUserInfoShareRequest request = new AlipayUserInfoShareRequest();
        AlipayUserInfoShareResponse response = alipayClient.execute(request, accessToken);
        if (response.isSuccess()) {
          System.out.println("获取会员信息 - 调用成功");
            return response;
        }
        return null;