第7天

本文介绍了一款支付SDK在Android Studio中的集成方法,并通过示例代码详细展示了提交订单及模拟支付的过程。文中覆盖了多种支付渠道的选择与实现,包括支付宝、微信、百度等,并解释了如何处理支付结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.支付sdk Ping++官网(android studio 的集成)


1.提交订单逻辑以及调用模拟支付

/**
 * Created by asus on 2016/10/31.
 *
 * 提交订单页面
 */
public class CreateOrderActivity extends AppCompatActivity implements View.OnClickListener {
    /**
     * 银联支付渠道
     */
    private static final String CHANNEL_UPACP = "upacp";
    /**
     * 微信支付渠道
     */
    private static final String CHANNEL_WECHAT = "wx";
    /**
     * 支付宝支付渠道
     */
    private static final String CHANNEL_ALIPAY = "alipay";
    /**
     * 百度支付渠道
     */
    private static final String CHANNEL_BFB = "bfb";
    /**
     * 京东支付渠道
     */
    private static final String CHANNEL_JDPAY_WAP = "jdpay_wap";

    @ViewInject(R.id.txt_order)//订单列表text
    private TextView txtOrder;

    @ViewInject(R.id.recycler_view)//内容显示mRecyclerView
    private RecyclerView mRecyclerView;


    @ViewInject(R.id.rl_alipay)//支付宝item
    private RelativeLayout mLayoutAlipay;

    @ViewInject(R.id.rl_wechat)//微信item
    private RelativeLayout mLayoutWechat;

    @ViewInject(R.id.rl_bd)//百度钱包item
    private RelativeLayout mLayoutBd;


    @ViewInject(R.id.rb_alipay)//按钮支付宝
    private RadioButton mRbAlipay;

    @ViewInject(R.id.rb_webchat)//按钮微信
    private RadioButton mRbWechat;

    @ViewInject(R.id.rb_bd)//按钮百度钱包
    private RadioButton mRbBd;

    @ViewInject(R.id.btn_createOrder)//提交订单按钮
    private Button mBtnCreateOrder;

    @ViewInject(R.id.txt_total)//实付多少钱
    private TextView mTxtTotal;


    private CartProvider cartProvider;//存储器
    private OkHttpHelper okHttpHelper = OkHttpHelper.getInstance();//

    private HashMap<String, RadioButton> buttonMap = new HashMap<>(3);//3个radiobutton互斥
    private String payChannel = CHANNEL_ALIPAY;//默认为支付宝
    private float amount;
    private CartShoppingAdapetr mAdapter;

    private  String orderNum;

    private SpotsDialog dialog;

    List<ShoppingCart> carts;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_create_order);
        ViewUtils.inject(this);

        initRecycleData();

        initRadiobutton();
        mBtnCreateOrder.setEnabled(true);//默认按钮为可可以选择
    }


    private void initRecycleData() {
        cartProvider = new CartProvider(this);
        mAdapter = new CartShoppingAdapetr(cartProvider.getAll(), this);

        //横向recycleView
        FullyLinearLayoutManager layoutManager = new FullyLinearLayoutManager(this);//横向一行显示
//        FullyGridLayoutManager layoutManager = new FullyGridLayoutManager(this,3);//横向嵌套scrollView 3行表格显示
        layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
        mRecyclerView.setLayoutManager(layoutManager);

        mRecyclerView.setAdapter(mAdapter);

    }

    /*设置3按钮和价格*/
    private void initRadiobutton() {
        buttonMap.put(CHANNEL_ALIPAY, mRbAlipay);//3个按钮对象
        buttonMap.put(CHANNEL_WECHAT, mRbWechat);
        buttonMap.put(CHANNEL_BFB, mRbBd);

        amount = mAdapter.getTotalPrice();
        mTxtTotal.setText("应付款: ¥" + amount);

        mLayoutAlipay.setOnClickListener(this);
        mLayoutWechat.setOnClickListener(this);
        mLayoutBd.setOnClickListener(this);


    }

    /*3个支付item的点击事件*/
    @Override
    public void onClick(View v) {
        switch (v.getTag().toString()){
            case CHANNEL_ALIPAY:
                payChannel = CHANNEL_ALIPAY;
                break;
            case CHANNEL_WECHAT:
                payChannel = CHANNEL_WECHAT;
                break;
            case CHANNEL_BFB:
                payChannel = CHANNEL_BFB;
                break;

        }
        selectPayChannle(v.getTag().toString());

    }


    /*支付按钮的点击事件*/
    @OnClick(R.id.btn_createOrder)
    public void createNewOrder(View view) {
        postNewOrder();
    }

    //提交
    private void postNewOrder() {

        carts = mAdapter.getDatas();
        List<WareItem> items = new ArrayList<>(carts.size());//将价格,和id放入到WareItem类的集合中

        for (ShoppingCart cart : carts) {
            WareItem item = new WareItem(cart.getId(), cart.getPrice().intValue());
            items.add(item);
        }

        String item_json = JSONUtil.toJSON(items);


        HashMap<String, Object> params = new HashMap<>(5);
        params.put("user_id", MyApplication.getInstance().getUser().getId() + "");//用户id
        params.put("item_json", item_json);//json字符串
        params.put("pay_channel", payChannel);//pay是什么(支付宝,微信。。。)
        params.put("amount", (int) amount + "");//数量
        params.put("addr_id", 1 + "");//用户填的地址id

        mBtnCreateOrder.setEnabled(false);

        dialog = new SpotsDialog(this,"正在提交,请稍后!");
        dialog.show();

        okHttpHelper.post(Contants.API.ORDER_CREATE, params, new SpotsCallBack<CreateOrderRespMsg>(this, false) {

            @Override
            public void onSuccess(Response response, CreateOrderRespMsg respMsg) {
                    mBtnCreateOrder.setEnabled(true);
                    dialog.dismiss();

                    orderNum = respMsg.getData().getOrderNum();
                //返回一个charge支付凭证是系统返回的
                    Charge charge = respMsg.getData().getCharge();

                    openPaymentActivity(JSONUtil.toJSON(charge));

            }

            @Override
            public void onError(Response response, int code, Exception e) {
                mBtnCreateOrder.setEnabled(true);
            }

        });


    }

    //返回charge值给支付页面
    private void openPaymentActivity(String charge){

        Intent intent = new Intent();
        String packageName = getPackageName();
        ComponentName componentName = new ComponentName(packageName, packageName + ".wxapi.WXPayEntryActivity");
        intent.setComponent(componentName);
        intent.putExtra(PaymentActivity.EXTRA_CHARGE, charge);
        startActivityForResult(intent, Contants.REQUEST_CODE_PAYMENT);
    }


    //支付页面返回结果处理
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        if (requestCode == Contants.REQUEST_CODE_PAYMENT) {
            if (resultCode == Activity.RESULT_OK) {
                String result = data.getExtras().getString("pay_result");

                if (result.equals("success")) {

                    changeOrderStatus(1);
                }
                else if (result.equals("fail"))
                    changeOrderStatus(-1);
                else if (result.equals("cancel"))
                    changeOrderStatus(-2);
                else
                    changeOrderStatus(0);

            /* 处理返回值
             * "success" - payment succeed
             * "fail"    - payment failed
             * "cancel"  - user canceld
             * "invalid" - payment plugin not installed
             *
             * 如果是银联渠道返回 invalid,调用 UPPayAssistEx.installUPPayPlugin(this); 安装银联安全支付控件。
             */
//                String errorMsg = data.getExtras().getString("error_msg"); // 错误信息
//                String extraMsg = data.getExtras().getString("extra_msg"); // 错误信息

            }
        }
    }

    //改变状态码
    private void changeOrderStatus(final int status){

        HashMap<String,Object> params = new HashMap<>(5);
        params.put("order_num",orderNum);
        params.put("status",status+"");

        okHttpHelper.post(Contants.API.ORDER_COMPLEPE, params, new SpotsCallBack<BaseRespMsg>(this,true) {
            @Override
            public void onSuccess(Response response, BaseRespMsg o) {

                toPayResultActivity(status);
            }

            @Override
            public void onError(Response response, int code, Exception e) {
                toPayResultActivity(-1);
            }
        });

    }


    //支付结果页面 成功或者失败以及取消
    private void toPayResultActivity(int status){

        Intent intent = new Intent(this,PayResultActivity.class);
        intent.putExtra("status",status);

        startActivity(intent);
        this.finish();

    }

    //设置radiobutton
    private void selectPayChannle(String tag) {
        Iterator<Map.Entry<String, RadioButton>> iterator = buttonMap.entrySet().iterator();
        while (iterator.hasNext()) {
            Map.Entry<String, RadioButton> next = iterator.next();
            String key = next.getKey();
            RadioButton button = next.getValue();
            if (key.equals(tag)) {
                button.setChecked(true);//如果选中,点击不选中
            } else {
                button.setChecked(false);
            }
        }
    }

    //javabean
    class WareItem {
        private Long ware_id;
        private int amount;

        public WareItem(Long ware_id, int amount) {
            this.ware_id = ware_id;
            this.amount = amount;
        }

        public Long getWare_id() {
            return ware_id;
        }

        public void setWare_id(Long ware_id) {
            this.ware_id = ware_id;
        }

        public int getAmount() {
            return amount;
        }

        public void setAmount(int amount) {
            this.amount = amount;
        }
    }

}


2.支付成功页面

//支付成功页面
public class PayResultActivity extends AppCompatActivity {

    @ViewInject(R.id.image_status)
    private ImageView image_status;

    @ViewInject(R.id.text_status)
    private TextView text_status;

    @ViewInject(R.id.go_home)
    private Button go_home;
    private int status;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_pay_result);
        ViewUtils.inject(this);

        status = getIntent().getIntExtra("status", 0);
        switch (status) {
            case 1:
                image_status.setImageDrawable(getResources().getDrawable(R.drawable.icon_success_128));
                text_status.setText("支付成功");
                successDelCart();
                break;
            case -2:
                image_status.setImageDrawable(getResources().getDrawable(R.drawable.icon_cancel_128));
                text_status.setText("支付取消");
                break;
            case -1:
                image_status.setImageDrawable(getResources().getDrawable(R.drawable.icon_cancel_128));
                text_status.setText("支付失败,请重新支付");

        }
    }


    //返回主页面
    @OnClick(R.id.go_home)
    public void caodan(View view) {
        Intent intent = new Intent(this, MainActivity.class);
        startActivity(intent);
        finish();
    }


    @Override
    public void onBackPressed() {
        super.onBackPressed();
    }

    public void successDelCart() {
        //如果成功了就删除购物车的数据
        CartProvider provider = new CartProvider(this);
        List<ShoppingCart> carts = provider.getAll();
        for (ShoppingCart cart : carts) {
            CartProvider cartProvider = new CartProvider(this);
            cartProvider.delete(cart);
        }

    }

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值