向个人收银 (C2B 支付)
接口列表
SDK 支付
SDK
客户端
Android 收银台组件

收银台 Android 组件

关于 SDK

SDK 名称: 腾讯微卡收付通收银台 SDK

开发者:腾讯云计算(北京)有限责任公司

版本号: 1.0.0

主要功能: 用于帮助客户的 app 快速拉起支付功能,完成支付。

使用说明: 下载安装 SDK 到客户的 app ,传入对应的参数,可以拉起对应支付功能,完成支付。

个人信息处理规则: 腾讯微卡收付通收银台 SDK 个人信息保护规则 (opens in a new tab)

合规使用指南: 腾讯微卡收付通收银台 SDK 合规使用指南 (opens in a new tab)

准备工作

接入前,要求接入方的 APP 先接入微信开放平台。由于微信开放平台审核有一定的时效(约 1-7 工作日),可以同步启动微信开放平台申请工作。申请过程中应用信息需客户端开发人员协助填写相关字段。

注册微信平台账号或使用已有的微信开放平台账号登录,参考以下流程完成接入:

1、创建应用

通过微信开放平台创建应用

2、提交审核

开发者提交应用创建后,需要提交审核,审核通过后才能正常使用

3、审核通过上线

审核通过后,开发者可将应用上线,上线后可以得到应用的 AppID,通过 APPID 可以使用微信开放平台的各项服务,例如微信登录、微信支付、微信分享、打开小程序等

申请页请查看:微信开放平台 - 移动应用开发 (opens in a new tab)

为什么我的应用需要接入微信开放平台?
应用需要获得跳转微信小程序、分享、支付等能力

我的应用是否需要上架应用市场?
需要,如不上架,会受微信部分能力限制,其中包括:

每天分享量受限制为 100 次,包括分享到会话和朋友圈
APP 跳转小程序的每天调用量受限制为 100 次
具体请参考微信开放平台 - 移动应用开发 (opens in a new tab)应用创建页。

同时移动应用需集成微信 Open SDK for iOS 1.8.6.1 及以上 (opens in a new tab) 用于支持打开微信小程序、分享等能力

Android 下载

重要:业务需提前集成微信 SDK, 具体请参考微信开放平台 - 移动应用开发 (opens in a new tab)应用创建页。

重要:若 targetSdkVersion 为 3 0 及以上,由于包见性问题,AndroidManifest.xml 需要添加以下配置声明微信包名,否法无法拉起微信小程序,详见 https://developer.android.google.cn/training/package-visibility/declaring?hl=zh-cn (opens in a new tab)

<manifest package="com.your.app">
    <queries>
        <package android:name="com.tencent.mm" />
    </queries>
</manifest>

SDK 下载

腾讯微卡收付通收银台 SDK 提供方为腾讯云计算(北京)有限责任公司,其个人信息处理规则见腾讯微卡收付通收银台 SDK 个人信息保护规则 (opens in a new tab),合规使用说明见腾讯微卡收付通收银台 SDK 合规使用指南 (opens in a new tab)

下载收付通 SDK:WecardPay-release-v0.0.6.aar (opens in a new tab) 下载相关依赖:msepay-sdk-android-1.0.2.aar (opens in a new tab)

集成指南

  1. 下载 SDK 与 Demo

请点击上文下载地址下载所需的 SDK 与 Demo

  1. 将下载的 aar 文件拷贝到工程的 app/libs 目录下
  2. 在工程根目录下的 build.gradle 中,添加 flatDir ,指定本地仓库路径
  3. app/build.gradle 中,添加引用 aar 包的代码
implementation(name: "WecardPay-release-v0.x.x", ext: "aar")
implementation(name: "msepay-sdk-android-1.0.2", ext: "aar")
  1. 添加引用微信 SDK 的代码
implementation 'com.tencent.mm.opensdk:wechat-sdk-android:6.8.0'
  1. 单击 Sync Now 按钮同步 SDK,完成集成工作

调用代码示例

方法

初始化
  • WecardPay.init(Context context, String appId)
    • 描述: 使用从微信开放平台申请的appId初始化 SDK。
    • 参数:
      • context:应用的上下文。
      • appId:微信开放平台申请的应用 ID。
发起支付
WecardPay.openPayment
  • WecardPay.openPayment(Activity activity, HashMap<String, Object> params, PayStatusChangeCallback callback)
    • 描述: 发起支付流程,并设置支付状态变更回调。
    • 参数:
      • activity:当前的Activity实例。
      • params:发起支付所需的参数,具体包括:
        • OutOrderId:商户订单号
        • PayInfo:微信支付所需的参数
        • Type: SDK 使用类型,例如 C2B,B2B, 这里填写 C2B (C2B 支付)。
      • callback:支付状态变更回调接口,定义如下:
        • 回调方法: onPayStatusChange(String value)
          • 参数: value - 表示支付状态的字符串,可能的值包括:
            • USER_EXIT:用户退出,支付状态未知,需要主动查询。
            • SUCCESS:支付成功。
            • PAY_FAIL:支付失败。

示例代码

package com.tencent.wecard.platform;
 
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
 
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
 
import com.tencent.wecard.wecardpay.WecardPay;
 
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
import android.widget.Toast;
 
import java.util.HashMap;
 
public class MainActivity extends AppCompatActivity {
 
    // 定义变量保存拉起支付需要的参数
    private HashMap<String, Object> paymentParams = null;
 
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
 
        // 初始化 WecardPay, 参数为微信开放平台申请的appId
        WecardPay.init(this.getApplicationContext(), "wx02563b8cf7b1048b");
 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        // 提前请求 预支付订单 参数
        requestPreOrder();
 
        TextView tvView = findViewById(R.id.C2BPay);
        tvView.setOnClickListener(v -> {
            // 检查是否有支付参数并拉起支付
            if (paymentParams != null) {
                WecardPay.openPayment(MainActivity.this, paymentParams, new WecardPay.PayStatusChangeCallback() {
                    @Override
                    public void onPayStatusChange(String value) {
                        // 支付状态变更回调
                        Log.d("MainActivity", "onPayStatusChange: " + value);
                        // toast
                        Toast.makeText(MainActivity.this, "支付状态改变: " + value, Toast.LENGTH_SHORT).show();
                    }
                });
            } else {
                // 可以在这里处理没有预支付订单的情况
                Log.d("MainActivity", "Payment parameters are not ready.");
                // toast
                Toast.makeText(MainActivity.this, "Payment parameters are not ready.", Toast.LENGTH_SHORT).show();
                requestPreOrder();
            }
        });
    }
 
    @Override
    protected void onResume() {
        super.onResume();
        // 每次Activity回到前台时请求最新的预支付订单
        requestPreOrder();
    }
 
    private void requestPreOrder() {
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("https://typ.wecard.tencent.com/")
                .addConverterFactory(GsonConverterFactory.create())
                .build();
 
        WeCardService service = retrofit.create(WeCardService.class);
        PreOrderRequest request = new PreOrderRequest("openPayment");
 
        service.getPreOrder(request).enqueue(new Callback<PreOrderResponse>() {
            @Override
            public void onResponse(Call<PreOrderResponse> call, Response<PreOrderResponse> response) {
                // 打印请求结果
                Log.d("MainActivity", "onResponse: " + response.body());
 
                if (response.isSuccessful() && response.body() != null) {
                    PreOrderResponse preOrderResponse = response.body();
                    if (preOrderResponse.getCode() == 0
                            && "SUCCESS".equals(preOrderResponse.getData().getResponse().getErrCode())) {
                        PreOrderResponse.Result result = preOrderResponse.getData().getResponse().getResult();
                        paymentParams = new HashMap<>();
                        paymentParams.put("OutOrderId", result.getOutOrderId());
                        paymentParams.put("OrderStatus", result.getOrderStatus());
                        paymentParams.put("FailReason", result.getFailReason());
                        paymentParams.put("PayInfo", result.getPayInfo());
                    }
                }
            }
 
            @Override
            public void onFailure(Call<PreOrderResponse> call, Throwable t) {
                // 处理请求失败的情况
                Log.e("MainActivity", "onFailure: " + t.getMessage());
                Toast.makeText(MainActivity.this, "Request failed.", Toast.LENGTH_SHORT).show();
            }
        });
    }
}

腾讯微卡收付通接口文档