安卓
设置账户 Server side
Client side
首先,您需要一个 MoneyCollect 账户。立即注册。
1.设置服务器端
可在GitHub 上Download 的模拟商家系统界面代码。
1.1 使用您自己的密钥替换 the public key
MobilePayController.Java 文件中的和 private key
// 您的帐户 PUBLIC_SECRET("Bearer "+PUBLIC_SECRET)
private static final String PUBLIC_SECRET = "Bearer live_pu_OGJ0EidwEg4GjymEiRD7cUBk7IQIYmhwhJlUM****";
// 您的帐户 PRIVATE_SECRET("Bearer "+PRIVATE_SECRET)
private static final String PRIVATE_SECRET = "Bearer live_pr_OGJ0EidwEg4GjymEiRD4MRxBCo0OumdH6URv****";
PUBLIC\SECRET 和 PRIVATE\SECRET 的格式为("Bearer"+PUBLIC_SECRET)
1.2 修改服务器端口(默认为 9898)
server.port=9898
商家用自己的key信息替换掉代码中的 the public key
和 private key
信息,然后打开服务器。(默认服务器端口为 9099,可修改)。(接口地址为本地 IP:9898)
2.设置客户端
导入 MoneyCollect Android SDK 并初始化 SDK.
2.1 在 build.gradle 文件中添加配置
要安装 SDK,请将以下内容添加 moneycollect-android
到文件的 build.gradle
依赖块中:
repositories {
jcenter()
maven{ url "https://raw.githubusercontent.com/MoneyCollect/moneycollect-api-android-demo/mcsdk" }
}
2.2 将 ViewBinding 和 MoneyCollect 库添加到应用程序的主模块 build.gradle 中
buildFeatures{
viewBinding = true
}
dependencies {
// 具体版本号根据您的需求确定
implementation "com.moneycollect.payment:android_mc:0.0.1"
}
2.3 初始化 SDK
在项目应用程序中初始化 MoneyCollect Android SDK
/**
* context: Context, (context)
* publishableKey: String, (publishable key)
* customerServerUrl: String? (Local ip:9898)
**/
MoneyCollectSdk.init(this, "live_pu_OGJ0EidwEg4GjymEiRD7cUBk7IQIYmhwhJlUM****","http://192.168.2.100:9898/")
3.构造发起交易的数据参数,然后启动支付活动
商家构造交易请求参数并点击结帐按钮以启动支付活动。( TestRequestData
是数据常量类,请查看MoneyCollect-API-Android-demo获取更多详细信息)
// ...
class PaymentSheetDemoActivity: AppCompatActivity() {
// 实例化RequestCreatePayment对象
var testRequestPayment = TestRequestData.testRequestPayment
// 实例化RequestConfirmPayment对象
var testConfirmPayment = TestRequestData.testConfirmPayment
// 实例化RequestPaymentMethod对象
var testRequestPaymentMethod = TestRequestData.testRequestPaymentMethod
// support payment credit card
var testBankIvList = TestRequestData.testBankIvList
// customerId
var customerId = TestRequestData.customerId
// ...
fun presentPaymentSheet() {
// PayCardActivity包含SaveWithPaymentCardFragment和AddWithPaymentFragment,支持相互切换
var intent = Intent(this, PayCardActivity::class.java)
// 实例化Bundle对象
var bundle = Bundle()
// 传递 currentPaymentModel
bundle.putSerializable(Constant.CURRENT_PAYMENT_MODEL, currentPaymentModel)
// 传递 RequestCreatePayment
bundle.putParcelable(Constant.CREATE_PAYMENT_REQUEST_TAG, testRequestPayment)
// 传递 RequestConfirmPayment
bundle.putParcelable(Constant.CONFIRM_PAYMENT_REQUEST_TAG, testConfirmPayment)
// 传递 customerId
bundle.putString(Constant.CUSTOMER_ID_TAG, TestRequestData.customerId)
// 传递 default RequestPaymentMethod
bundle?.putParcelable(Constant.CREATE_PAYMENT_METHOD_REQUEST_TAG, testRequestPaymentMethod)
// 传递默认的 supportBankList
bundle?.putSerializable(Constant.SUPPORT_BANK_LIST_TAG, testBankIvList)
intent.putExtra(CURRENT_PAYMENT_BUNDLE, bundle)
// 开始付款
startActivityLauncher.launch(intent)
}
private val startActivityLauncher: ActivityResultLauncher<Intent> =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
}
}
客户通过单击“立即支付”按钮完成付款后,付款的相关窗口将会被关闭并返回到 PaymentSheetDemoActivity.同时,将回拨付款 _ 结果 。
// ...
class PaymentSheetDemoActivity: AppCompatActivity() {
private val startActivityLauncher: ActivityResultLauncher<Intent> =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
if (it.resultCode == Constant.PAYMENT_RESULT_CODE) {
// 付款结果
var payment =
it.data?.getParcelableExtra<Payment>(Constant.PAYMENT_RESULT_PAYMENT)
if (payment != null) {
when (payment.status) {
Constant.PAYMENT_SUCCEEDED -> {
Log.e(TAG, Constant.PAYMENT_SUCCEEDED)
}
Constant.PAYMENT_FAILED -> {
payment?.errorMessage?.let { it1 ->
Log.e(TAG, it1)
}
}
Constant.PAYMENT_UN_CAPTURED -> {
Log.e(TAG, Constant.PAYMENT_UN_CAPTURED_MESSAGE)
}
Constant.PAYMENT_PENDING -> {
Log.e(TAG, Constant.PAYMENT_PENDING_MESSAGE)
}
Constant.PAYMENT_CANCELED -> {
Log.e(TAG, Constant.PAYMENT_CANCELED_MESSAGE)
}
else -> {
Log.e(TAG, Constant.PAYMENT_PENDING_MESSAGE)
}
}
}
}
}
}
使用完成块处理付款结果。
如果付款因错误而失败,请向您的客户显示相应的消息,以便他们可以采取措施并重试。如果没有发生错误,请告诉您的客户付款成功。
// ...
public class PaymentSheetDemoActivity extends AppCompatActivity {
// 实例化RequestCreatePayment对象
RequestCreatePayment testRequestPayment = TestRequestData.Companion.getTestRequestPayment();
// 实例化RequestConfirmPayment对象
RequestConfirmPayment testConfirmPayment = TestRequestData.Companion.getTestConfirmPayment();
// 实例化RequestPaymentMethod对象
RequestPaymentMethod testRaymentMethod = TestRequestData.Companion.getTestRequestPaymentMethod();
// 支持信用卡支付
List<Integer> testBankIvList = TestRequestData.Companion.getTestBankIvList();
// customerId
String customerId = TestRequestData.Companion.getCustomerId();
// ...
private void presentPaymentSheet() {
// PayCardActivity包含SaveWithPaymentCardFragment和AddWithPaymentFragment,支持相互切换
Intent intent = new Intent(this, PayCardActivity.class);
// 实例化Bundle对象
Bundle bundle = new Bundle();
// 传递 currentPaymentModel
bundle.putSerializable(
Constant.CURRENT_PAYMENT_MODEL,
currentPaymentModel
);
// 传递 RequestCreatePayment
bundle.putParcelable(
Constant.CREATE_PAYMENT_REQUEST_TAG,
testRequestPayment
);
// 传递 RequestConfirmPayment
bundle.putParcelable(
Constant.CONFIRM_PAYMENT_REQUEST_TAG,
testConfirmPayment
);
// 传递 currentId
bundle.putString(
Constant.CUSTOMER_ID_TAG,
customerId
);
// 传递 RequestPaymentMethod
bundle.putParcelable(Constant.CREATE_PAYMENT_METHOD_REQUEST_TAG, testRaymentMethod);
// 传递默认的 supportBankList
bundle.putSerializable(Constant.SUPPORT_BANK_LIST_TAG, TestRequestData.Companion.getTestBankIvList());
intent.putExtra(CURRENT_PAYMENT_BUNDLE, bundle);
startActivityLauncher.launch(intent);
}
private ActivityResultLauncher<Intent> startActivityLauncher =
PaymentSheetDemoActivity.this.registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>() {
@SuppressLint("LongLogTag")
@Override
public void onActivityResult(ActivityResult result) {
}
});
}
客户通过点击“立即支付”按钮完成付款后,付款活动将被取消并返回到 PaymentSheetDemoActivity.同时,将回拨付款 _ 结果 _ 付款。
// ...
public class PaymentSheetDemoActivity extends AppCompatActivity {
private ActivityResultLauncher<Intent> startActivityLauncher =
PaymentSheetDemoActivity.this.registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>() {
@SuppressLint("LongLogTag")
@Override
public void onActivityResult(ActivityResult result) {
// 付款结果
if (result.getResultCode() == Constant.PAYMENT_RESULT_CODE) {
Payment payment =
result.getData().getParcelableExtra(Constant.PAYMENT_RESULT_PAYMENT);
if (payment != null) {
if(payment.getStatus() != null) {
switch (payment.getStatus()) {
case Constant.PAYMENT_SUCCEEDED:
Log.e(TAG, Constant.PAYMENT_SUCCESSFUL_MESSAGE);
break;
case Constant.PAYMENT_FAILED:
Log.e(TAG, payment.getErrorMessage());
break;
case Constant.PAYMENT_UN_CAPTURED:
Log.e(TAG, Constant.PAYMENT_UN_CAPTURED_MESSAGE);
break;
case Constant.PAYMENT_PENDING:
Log.e(TAG, Constant.PAYMENT_PENDING_MESSAGE);
break;
case Constant.PAYMENT_CANCELED:
Log.e(TAG, Constant.PAYMENT_CANCELED_MESSAGE);
break;
default:
Log.e(TAG, Constant.PAYMENT_PENDING_MESSAGE);
break;
}
}else {
Log.e(TAG, Constant.PAYMENT_PENDING_MESSAGE);
}
}
}
}
});
}
处理付款结果。
如果付款因错误而失败,请向您的客户显示相应的消息,以便他们可以采取措施并重试。如果没有发生错误,请告诉您的客户付款成功。
4.其他测试资源
您可以使用几个测试卡来确保您的集成已准备好投入生产。将它们与任何 CVC、邮政编码和未来到期日期一起使用。
4242 4242 4242 4242
Visa
成功并立即处理付款。
3566 0020 2036 0505
JCBA
成功并立即处理付款。
6011 1111 1111 1117
Discover
成功并立即处理付款。
3782 8224 6310 0052
American Express
成功并立即处理付款。
5555 5555 5555 4444
Mastercard
成功并立即处理付款。
4000002500003155
Visa
此卡在所有交易中均需要3D认证
4000 0000 0000 0077
Visa
始终以declined
的拒绝代码失败。
Last updated