仿电商App:笔记(十一):购物车,订单,支付功能开发(包含支付宝支付)(二)
逻辑梳理:
订单包含:用户id,订单id,描述,总之,类型等,通过post传递给自己服务器-->第三方服务器(认证)-->通知自己的服务器可以发起支付-->支付宝的sdk(将签名等信息传过去)-->返回响应值(支付宝规定的):支付状态:成功、失败、网络意外...
具体流程:在购物车根页面中:进行网络请求(自己的服务器,传入生成订单需要的参数)-->请求成功(省略了第三方认证环节,将第三方认证的orderId自己传入):调用支付宝支付平台,传入需要的信息(订单)-->进入FastPay中,进行异步的网络请求,调用客服端支付接口(使用AsyncTask)-->PayAsyncTask中,含有支付状态码,处理doInBackground():根据签名信息返回状态码,返回结果onPostExecute():对返回结果中的状态码进行判断,不同状态吗显示不同信息,具体接口方法实现在购物车根页面中。
6、订单和支付逻辑梳理和创建
6.1 购物车初始化时候的总价值
逻辑:从adapter中获取到总价数据,赋值到总价按钮的View上。
位于latte-ec模块main->cart包下的ShopCartDelegate。
主要作用:购物车页面的根fragment,初始化总价钱按钮。
public class ShopCartDelegate extends BottomItemDelegate implements ISuccess,ICartItemListener {
......
private double mTotalPrice = 0.0;//初始化总价钱的数值
......
@BindView(R2.id.tv_shop_cart_total_price)//总价按钮
AppCompatTextView mTvTotalPrice = null;
......
@Override
public void onSuccess(String response) {
final ArrayList<MultipleItemEntity> data =
new ShopCartDataConverter()
.setJsonData(response)
.convert();
mAdapter = new ShopCartAdapter(data);
mAdapter.setCartItemListener(this);
final LinearLayoutManager manager = new LinearLayoutManager(getContext());
mRecyclerView.setLayoutManager(manager);
mRecyclerView.setAdapter(mAdapter);//缓存到类中
** mTotalPrice = mAdapter.getTotalPrice();
** mTvTotalPrice.setText(String.valueOf(mTotalPrice));//初始化的时候直接更新数值
checkItemCount();
}
@Override
public void onItemClick(double itemTotalPrice) {
final double price = mAdapter.getTotalPrice();
** mTvTotalPrice.setText(String.valueOf(price));
}
}
6.2 订单和支付逻辑梳理
订单和支付是两个不同的东西
订单:记录这次发起的行为:行为所标记的信息,支付成功、支付失败、支付意外等
支付:将钱给支付宝,支付宝管理
订单包含:用户id,订单id,描述,总之,类型等,通过post传递给自己服务器-->第三方服务器(认证)-->通知自己的服务器可以发起支付-->支付宝的sdk(将签名等信息传过去)-->返回响应值(支付宝规定的):支付状态:成功、失败、网络意外...
位于latte-ec模块main->cart包下的ShopCartDelegate。
主要作用:购物车页面的根fragment,创建订单。
public class ShopCartDelegate extends BottomItemDelegate implements ISuccess,ICartItemListener {
......
@OnClick(R2.id.tv_shop_cart_pay)//结算按钮
void onClickPay(){
}
//创建订单,注意:和支付是没有关系的
private void createOrder(){
final String orderUrl = "";
final WeakHashMap<String,Object> orderParams = new WeakHashMap<>();//订单需要传入的参数
orderParams.put("userid","");
orderParams.put("amount",0.01);//总价
orderParams.put("commit","测试支付");//描述
orderParams.put("type",1);
orderParams.put("ordertype",0);
orderParams.put("isanonymous",true);
orderParams.put("followeduser",0);
RestClient.builder()//发起订单
.url(orderUrl)//请求自己的服务器
.loader(getContext())
.params(orderParams)
.success(new ISuccess() {
@Override
public void onSuccess(String response) {
//进行具体的支付
}
})
.build()
.pos