此篇文章仅个人经验,文采不好请见谅,有什么问题欢迎骚扰
以上就是整个支付宝的支付,测试activity界面只有一个button,就不贴代码了
- 首先到下载相应的SDK和DEMO,地址:https://doc.open.alipay.com/doc2/detail?treeId=59&articleId=103563&docType=1
- 配置路径:https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.pyK22N&treeId=59&articleId=104672&docType=1
- 编写代码,我觉得这一步才是关键,上面的步骤和官网一模一样,记住是一模一样。
这是activity的代码
package com.test.module.product.pay; import android.annotation.SuppressLint; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.v7.app.AppCompatActivity; import android.text.TextUtils; import android.util.Log; import android.view.View; import android.widget.Toast; import com.alipay.sdk.app.PayTask; import com.google.gson.Gson; import com.test.R; import com.test.base.ListviewCallBack; import com.test.module.product.bean.PayInfoBean; import com.test.module.product.dao.ProductDao; import java.util.Map; public class TestActivity extends AppCompatActivity { private PayInfoBean payInfoBean; private static final int SDK_PAY_FLAG = 1; @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(TestActivity.this, "支付成功", Toast.LENGTH_SHORT).show(); } else { // 该笔订单真实的支付结果,需要依赖服务端的异步通知。 Toast.makeText(TestActivity.this, "支付失败", Toast.LENGTH_SHORT).show(); } break; } } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test); /** * 加载支付参数 */ ProductDao.GetPayInfo(new ListviewCallBack() { @Override public void updateListview(Object data) { String str = (String) data; Gson gson = new Gson(); payInfoBean = gson.fromJson(str, PayInfoBean.class); } }); } public void pay(View v) { final String orderInfo = OrderInfoUtil2_0.getOrderInfo(payInfoBean); Runnable payRunnable = new Runnable() { @Override public void run() { PayTask alipay = new PayTask(TestActivity.this); Map<String, String> result = alipay.payV2(orderInfo, true); Log.i("msp", result.toString()); Message msg = new Message(); msg.what = SDK_PAY_FLAG; msg.obj = result; mHandler.sendMessage(msg); } }; Thread payThread = new Thread(payRunnable); payThread.start(); } }
这是OrderInfoUtil2_0.java
package com.test.module.product.pay; import com.test.module.product.bean.PayInfoBean; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; import java.util.Random; /** * 订单工具类 */ public class OrderInfoUtil2_0 { /** * 拼接订单信息 * @param payInfoBean * @return */ public static String getOrderInfo(PayInfoBean payInfoBean){ String orderInfo = "_input_charset=\""+payInfoBean.get_input_charset() +"\"&body=\""+payInfoBean.getBody() +"\"¬ify_url=\""+payInfoBean.getNotify_url() +"\"&out_trade_no=\""+payInfoBean.getOut_trade_no() +"\"&partner=\""+payInfoBean.getPartner() +"\"&payment_type=\""+payInfoBean.getPayment_type() +"\"&seller_id=\""+payInfoBean.getSeller_id() +"\"&service=\""+payInfoBean.getService() +"\"&subject=\""+payInfoBean.getSubject() +"\"&total_fee=\""+payInfoBean.getTotal_fee() +"\"&sign_type=\""+payInfoBean.getSign_type() +"\"&sign=\""+payInfoBean.getSign() + "\""; return orderInfo; } /** * 要求外部订单号必须唯一。 * * @return */ private static String getOutTradeNo() { SimpleDateFormat format = new SimpleDateFormat("MMddHHmmss", Locale.getDefault()); Date date = new Date(); String key = format.format(date); Random r = new Random(); key = key + r.nextInt(); key = key.substring(0, 15); return key; } }
常见问题:
ALI(****)等问题的基本都是公匙或者私匙不正确的问题
ALI(159):
1. 查看价格、是否正常,支付宝最少是0.01元
2. 查看订单号是否正常,不能携带特殊字符
ALI(164):
1. 检查公匙和私匙是否配置正确
如果我文章对你没有帮助,你可以看看我收藏的文章
相关博客: