cordova/ionic alipay 支付宝插件

本文介绍如何创建一个适用于Cordova和Ionic的最新版支付宝支付插件。从创建插件目录、编写JavaScript接口到实现Android和iOS的原生代码,详细讲解每个步骤,包括配置文件和插件调用方法。
摘要由CSDN通过智能技术生成

        最近在做的一个项目中涉及到了支付宝支付。在尝试了网络上的几个插件之后,发现都因为版本太老,支付宝官方提供的接口已经发生了改变,所以无法使用。于是决定自己动手编写一个最新版的支付宝插件,下面我们进入主题。

1、创建插件目录

        新建一个文件夹,作为插件根目录,在根目录中新建两个文件夹,一个为src存放原生代码源文件,一个为www存放插件js文件。另外在根目录下创建plugin.xml文件,用于写入插件配置。

2、编写alipay.js

var exec = require('cordova/exec');

var Alipay = {

  /**
   * 支付宝支付业务
   *
   * @param price   付款金额
   * @param subject 主题
   * @param body    详情
   * @param tradeNo 订单号
   */
    pay:function(onSuccess, onError, price, subject, body, tradeNo) {
        exec(
            onSuccess,
            onError,
            "AlipayPlugin",
            "alipay",
            [price, subject, body, tradeNo]
        );
    }
}

module.exports = Alipay;

第一个参数为支付成功后的回调方法,第二个参数为失败后的回调方法。

3、编写原生代码

3.1 Andoid原生

首先在src目录下,创建android和ios目录,用于存放两个平台的原生代码及库文件,在这里我用的是支付宝的20161222版本,是截止到本文发布时的最新版本。

去支付宝官网下载最新demo,然后将其中的工具类、jar包以及资源文件拷贝到android目录下,新建一个类命名为AlipayPlugin.java,继承CordovaPlugin,用于存放支付宝的支付逻辑。

package com.beanyon.alipay;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.os.Handler;
import android.os.Message;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.Toast;

import com.alipay.sdk.app.PayTask;
import com.beanyon.alipay.util.OrderInfoUtil2_0;

import org.apache.cordova.CallbackContext;
import org.apache.cordova.CordovaPlugin;
import org.json.JSONArray;
import org.json.JSONException;

import java.util.Map;

/**
 * Created by BeanYon on 2017/1/6.
 */
public class AlipayPlugin extends CordovaPlugin {

  private Context mContext = null;
  private final String ACTION_FLAG = "alipay";//传入的action参照
  CallbackContext currentCallbackContext;//回调参数

  /**
   * 支付宝支付业务:入参app_id
   */
  public static final String APPID = "你的app_id";

  /** 商户私钥,pkcs8格式 */
  /** 如下私钥,RSA2_PRIVATE 或者 RSA_PRIVATE 只需要填入一个 */
  /** 如果商户两个都设置了,优先使用 RSA2_PRIVATE */
  /** RSA2_PRIVATE 可以保证商户交易在更加安全的环境下进行,建议使用 RSA2_PRIVATE */
  /** 获取 RSA2_PRIVATE,建议使用支付宝提供的公私钥生成工具生成, */
  /**
   * 工具地址:https://doc.open.alipay.com/docs/doc.htm?treeId=291&articleId=106097&docType=1
   */
  public static final String RSA2_PRIVATE = "your_private_key";
  public static final String RSA_PRIVATE = "";
  private static final int SDK_PAY_FLAG = 1;

  @Override
  public boolean execute(String action, final JSONArray args, final CallbackContext callbackContext) throws JSONException {
    currentCallbackContext = callbackContext;
    mContext = cordova.getActivity();
    if (ACTION_FLAG.equals(action)) {
      return payV2(args.getString(0),args.getString(1),args.getString(2),args.getString(3));//调用支付宝付款
    }
    return true;
  }

  @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(mContext, "支付成功", Toast.LENGTH_SHORT).show();
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值