收银台 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)
集成指南
- 下载 SDK 与 Demo
请点击上文下载地址下载所需的 SDK 与 Demo
- 将下载的
aar
文件拷贝到工程的app/libs
目录下 - 在工程根目录下的
build.gradle
中,添加flatDir
,指定本地仓库路径 - 在
app/build.gradle
中,添加引用aar
包的代码
implementation(name: "WecardPay-release-v0.x.x", ext: "aar")
implementation(name: "msepay-sdk-android-1.0.2", ext: "aar")
- 添加引用微信 SDK 的代码
implementation 'com.tencent.mm.opensdk:wechat-sdk-android:6.8.0'
- 单击 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();
}
});
}
}