之前有个很蛋疼的需求,就是在不接入支付宝SDK的情况下获取支付宝授权码。总之是一直在调试支付宝的SDK是怎么跳转的,因为没有其他的办法;不能的App之间的跳转基本都是通过Intent隐式跳转来实现的。所以就需要看他传递了哪些参数,最终在IOS同学的帮组下找到了方法,因为ios能够拦截跳转到支付宝授权界面的参数,就抱着试试看的态度,然后发现是真的可行。
下面贴出步骤:
步骤1: 在你的项目中,新建一个包名为 com.alipay.sdk.app 的activity, AlipayResultActivity;包名一定要这样。这个Activity是用来接收支付宝授权后的授权码:
public class AlipayResultActivity extends Activity { protected void onCreate(Bundle var1) { super.onCreate(var1); Intent intent = getIntent(); // 获取 authCode String authCode = intent != null ? intent.getBundleExtra("result").getString("auth_code") : "-10001"; Log.e("xxxxxx", "authcode = " + authCode); Toast.makeText(this, "authCode = " + authCode, Toast.LENGTH_SHORT).show(); finish(); } }步骤2: 在Androidmanifest中注册步骤一创建的activity,如下:
<!--这个Activity 的名字和路径不能改动--> <!-- 为了使用 "通用跳转 SDK" 的能力,需要在你的 App 的 AndroidManifest.xml 中添加这一项 --> <!-- 并合理设置 android:scheme 的值 --> <activity android:name="com.alipay.sdk.app.AlipayResultActivity" tools:node="merge"> <intent-filter tools:node="replace"> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.BROWSABLE"/> <data android:scheme="__comeonbaby__"/> </intent-filter> </activity>步骤3 最重要的一步,就是怎么拼接参数并跳转到支付宝授权,代码如下:
public class MainActivity extends AppCompatActivity { public static final String APPID = "2021001187657520"; // 申请的ID @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.content_main); } @SuppressLint("WrongConstant") public void openTestScheme(View view) { String url = "https://authweb.alipay.com/auth?auth_type=PURE_OAUTH_SDK&app_id=" + APPID + "&scope=auth_user&state=init"; JSONObject jsonObject = new JSONObject(); try { jsonObject.put("package", "com.fraker.phone.myapplication"); // 需要集成的应用的包名,就是你们自己APP的包名 jsonObject.put("appId", "20000067");// 写死的 jsonObject.put("sdkVersion", "h.a.3.6.4"); // 写死的 jsonObject.put("scheme", "__test123__"); // 必须和AndroidManifest.xml中注册的 AlipayResultActivity 中的 scheme 保持一致 jsonObject.put("session", "112233"); jsonObject.put("mqpURL", "alipays://platformapi/startapp?appId=20000067&mqpPkgName=com.alipay.sdk.pay.demo&mqpScene=sdk&url=" + URLEncoder.encode(url)); } catch (JSONException e) { e.printStackTrace(); } String payload = Base64.encodeToString(jsonObject.toString().getBytes(Charset.forName("UTF-8")), Base64.NO_WRAP); Uri uri = (new Uri.Builder()).scheme("alipays").authority("platformapi").path("startapp").appendQueryParameter("appId", "20001129").appendQueryParameter("payload", payload).build(); // 20001129 写死的,表示获取授权 Intent intent = new Intent("android.intent.action.VIEW", uri); intent.setPackage("com.eg.android.AlipayGphone"); // 支付宝的包名 写死的 不用修改 startActivity(intent); } }代码里面都注释的很清楚了。
