一.支付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);
}
}
}