温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎样在Android App中集成支付宝和微信支付功能

发布时间:2021-02-18 10:47:22 来源:亿速云 阅读:282 作者:小新 栏目:移动开发

这篇文章主要介绍了怎样在Android App中集成支付宝和微信支付功能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

集成支付宝支付

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

怎样在Android App中集成支付宝和微信支付功能

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

首先,去下载官方的 DEMO :

App支付客户端DEMO&SDK。

导入开发资源

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

怎样在Android App中集成支付宝和微信支付功能

然后进入工程的“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
  }
 }
}

感谢你能够认真阅读完这篇文章,希望小编分享的“怎样在Android App中集成支付宝和微信支付功能”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI