首页 > 系统 > Android > 正文

如何在Android App中集成支付宝和微信支付功能

2019-10-22 18:12:14
字体:
来源:转载
供稿:网友

前言

本文主要介绍如何在 Android App 里集成支付宝微信支付的功能,文中将实现的步骤一步步介绍的非常详细,对同样遇到这个问题的朋友相信会是一个很好的参考,下面话不多说了,来一起看看详细的介绍吧。

集成支付宝支付

没想到现在 App 里集成支付宝是这么的简单,我还折腾了好久…

android,微信支付,支付宝

好了,开始,假设你已经完成了支付宝那些繁杂的申请啥的工作,进入开发了。

首先,去下载官方的 DEMO :

App支付客户端DEMO&SDK

导入开发资源

解压后把里面的 jar 包拿出来放到你工程的 lib 目录下,如图

android,微信支付,支付宝

然后进入工程的“Project Structure”,在app module下选择“File dependency”,将libs目录下的alipaySDK-xxxxxxxx.jar导入,或者在app module下的build.gradle下手动添加依赖,如下代码所示:

......compile files('libs/alipaySdk-20170725.jar')......

修改 AndroidManifest 文件

复制进去就行

<activity android:name="com.alipay.sdk.app.H5PayActivity" android:configChanges="orientation|keyboardHidden|navigation|screenSize" android:exported="false" android:screenOrientation="behind" android:windowSoftInputMode="adjustResize|stateHidden" ></activity> <activity android:name="com.alipay.sdk.app.H5AuthActivity" android:configChanges="orientation|keyboardHidden|navigation" android:exported="false" android:screenOrientation="behind" android:windowSoftInputMode="adjustResize|stateHidden" ></activity>

声明权限

<uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><uses-permission android:name="android.permission.READ_PHONE_STATE" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

好了,准备工作基本完成。

支付接口的调用

这里参考下给的 Demo。
由于支付包的 Demo 给的是本地加密的方式,并且不推荐使用这种方法,所以我们只需要用的其中的部分代码就好了。
首先,把 PayResult.java这个类复制到你的项目里。代码如下:

public class PayResult { private String resultStatus; private String result; private String memo; public PayResult(Map<String, String> rawResult) {  if (rawResult == null) {   return;  }  for (String key : rawResult.keySet()) {   if (TextUtils.equals(key, "resultStatus")) {    resultStatus = rawResult.get(key);   } else if (TextUtils.equals(key, "result")) {    result = rawResult.get(key);   } else if (TextUtils.equals(key, "memo")) {    memo = rawResult.get(key);   }  } } @Override public String toString() {  return "resultStatus={" + resultStatus + "};memo={" + memo    + "};result={" + result + "}"; } /**  * @return the resultStatus  */ public String getResultStatus() {  return resultStatus; } /**  * @return the memo  */ public String getMemo() {  return memo; } /**  * @return the result  */ public String getResult() {  return result; }}

然后调支付接口。PayTask对象主要为商户提供订单支付、查询功能,及获取当前开发包版本号。获取PayTask支付对象调用支付(支付行为需要在独立的非ui线程中执行),

private static final int SDK_PAY_FLAG = 1;// 订单信息final String orderInfo = info; Runnable payRunnable = new Runnable() {@Override public void run() {  PayTask alipay = new PayTask(PayDemoActivity.this);  Map<String, String> result = alipay.payV2(orderInfo, true);  Message msg = new Message();  msg.what = SDK_PAY_FLAG;  msg.obj = result;  mHandler.sendMessage(msg); }};Thread payThread = new Thread(payRunnable);payThread.start();

注意下 orderInfo这个变量,这个值是由通过向后台请求返回的值。

这里需要后台注意的是,写的时候看好App支付请求参数说明这个文档。

然后是支付结果的获取与处理。

@SuppressLint("HandlerLeak") private Handler mHandler = new Handler() {  @SuppressWarnings("unused")  public void handleMessage(Message msg) {   switch (msg.what) {   case SDK_PAY_FLAG: {    @SuppressWarnings("unchecked")    PayResult payResult = new PayResult((Map<String, String>) msg.obj);    /**     对于支付结果,请商户依赖服务端的异步通知结果。同步通知结果,仅作为支付结束的通知。     */    String resultInfo = payResult.getResult();// 同步返回需要验证的信息    String resultStatus = payResult.getResultStatus();    // 判断resultStatus 为9000则代表支付成功    if (TextUtils.equals(resultStatus, "9000")) {     // 该笔订单是否真实支付成功,需要依赖服务端的异步通知。     Toast.makeText(PayDemoActivity.this, "支付成功", Toast.LENGTH_SHORT).show();    } else {     // 该笔订单真实的支付结果,需要依赖服务端的异步通知。     Toast.makeText(PayDemoActivity.this, "支付失败", Toast.LENGTH_SHORT).show();    }    break;   }   default:    break;   }  }; };

然后就好了。

结束。

集成微信支付

微信支付还是好弄的,就是先该注册的注册,该申请的申请,这个不是本文的重点。

因为微信有个支付回调的问题,我的做法就是在项目的x.x.x.wxapi包路径中实现 WXPayEntryActivity 类(切记包名或类名一定要一致,否则会造成无法回调)。代码如下:

public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler{ private static final String TAG = "WXPayEntryActivity"; private IWXAPI api; @Override public void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.pay_result);    api = WXAPIFactory.createWXAPI(this, Constants.APP_ID);  api.handleIntent(getIntent(), this);  /*  * 在这里去做跟后台服务器的请求,  * 获取需要的签名信息,然后调起微信支付。  **/ } @Override protected void onNewIntent(Intent intent) {  super.onNewIntent(intent);  setIntent(intent);  api.handleIntent(intent, this); } @Override public void onReq(BaseReq req) { } @Override public void onResp(BaseResp resp) {  Log.d(TAG, "onPayFinish, errCode = " + resp.errCode);  switch(resp.errCode){   case 0:   //支付成功,做自己想做的处理   break;   case -1:   //可能的原因:签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配、其他异常等。   break;   case -2:   //用户取消.无需处理。发生场景:用户不支付了,点击取消,返回APP。   break;   default:   break  } }}

后记

这是第一次接入支付宝支付,一开始还很起劲的参照一个库去进行封装,然后发现好像多此一举,并且还不成功,和后台捯饬了好久然后看Demo才弄出来。

参考:

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对VEVB武林网的支持。


注:相关教程知识阅读请移步到Android开发频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表