支付宝第三方登录集成文档

来源:互联网 发布:java投票系统源代码 编辑:程序博客网 时间:2024/05/02 02:57

      之前项目用到支付宝的第三方登录,一看到就懵圈了,难道支付宝还有第三方登录吗?经过千辛万苦的百度,终于集成成功了,特在此记录下来供有需要的朋友们参考!如有不足,欢迎补充!!!

   1. 从官方地址https://doc.open.alipay.com/doc2/detail.htm?treeId=54&articleId=104509&docType=1 下载demo (里面包含了sdk)

 

   2. 导入到as,找到PayDemoActivity,  authV2(View v)就是授权的方法,把这个方法copy到自己的需要调用的地方的方法

 

 

    3. AuthResult类和OrderInfoUtil2_0工具类一起copy到自己的工程包下

    4. 需要从你的上司那得到以下的参数

 

/** 支付宝支付业务:入参app_id */

public static final String APPID = "";

/** 支付宝账户登录授权业务:入参pid*/

public static final String PID = "";

/** 支付宝账户登录授权业务:入参target_id*/

public static final String TARGET_ID = "";

 

/** 商户私钥,pkcs8格式*/

public static final String RSA_PRIVATE = "";

 

5.在授权成功后得到返回的参数仅当== resultStatus为“9000”且result_code为“200”时,代表授权成功(result="success=true&auth_code=d9d1b5acc26e461dbfcb6974c8ff5E64&result_code=200 &user_id=2088003646494707")

auth_code : userOpenToken

user_id  : uid

 

 

以下是开发过程中遇到的问题和解决方法:

 

摘要: java.security.spec.InvalidKeySpecException: java.lang.RuntimeException: error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag ClassCastException: com.android.org.bouncycastle.asn1.DLSequence cannot be cast to com.android.org.bouncycastle.asn1.ASN1Integer

 

public class SignUtils {

 

 

 private static final String ALGORITHM = "RSA";

 

 

 private static final String SIGN_ALGORITHMS = "SHA1WithRSA";

 

 

 private static final String DEFAULT_CHARSET = "UTF-8";

 

 

 public static String sign(String content, String privateKey) {

 

 try {

 

 PKCS8EncodedKeySpec priPKCS8 = new PKCS8EncodedKeySpec(

 

 Base64.decode(privateKey));

 

 KeyFactory keyf = KeyFactory.getInstance(ALGORITHM);

 

 PrivateKey priKey = keyf.generatePrivate(priPKCS8);

 

 

 java.security.Signature signature = java.security.Signature

 

 .getInstance(SIGN_ALGORITHMS);

 

 

 signature.initSign(priKey);

 

 signature.update(content.getBytes(DEFAULT_CHARSET));

 

 

 byte[] signed = signature.sign();

 

 

 return Base64.encode(signed);

 

 } catch (Exception e) {

 

 e.printStackTrace();

 

 }

 

 

 return null;

 

 }

 

 

}

 

 

第一开始,调用KeyFactory keyf = KeyFactory.getInstance(ALGORITHM);报错。如下:

 

java.security.spec.InvalidKeySpecException: java.lang.RuntimeException: error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag

 

 

KeyFactory keyf = KeyFactory.getInstance(ALGORITHM, "BC");  加入了“BC”报如下错误:

 

com.android.org.bouncycastle.jcajce.provider.asymmetric.util.ExtendedInvalidKeySpecException: unable to process key spec: java.lang.ClassCastException: com.android.org.bouncycastle.asn1.DLSequence cannot be cast to com.android.org.bouncycastle.asn1.ASN1Integer

 

 

最终因为传入私钥错误。需要重新生成私钥

1 1
原创粉丝点击