Commit f1bed9aa2297067014514087991a024c249e2dfe

Authored by 李毅
1 parent 7758c6a4

u

Showing 1 changed file with 272 additions and 0 deletions
06.支付云/4.2app.md
... ... @@ -607,3 +607,275 @@ public class SHA1 {
607 607 将 sign=signValue拼接到string2后面得到最终的 参数 字符串
608 608 map.put("sign", getSign(map, TOKEN_KEY));
609 609  
  610 +6)预支付调用
  611 +
  612 +```java
  613 +//订单生成:
  614 +public static String getOrderId(String frmId) {
  615 + StringBuilder sb = new StringBuilder();
  616 + String timestamp = String.valueOf(System.currentTimeMillis());
  617 + sb.append(SPID).append(frmId)
  618 + .append(android.text.format.DateFormat.format("yyyyMMdd", new Date()).toString())
  619 + .append(timestamp.substring(timestamp.length() - 8))
  620 + .append((int) (Math.random() * 999));
  621 + LOGD("order id:" + sb.toString());
  622 + return sb.toString();
  623 + }
  624 +//Map生成
  625 + public static Map<String, String> getPayVideoOnceToken(String account,
  626 + String sid,
  627 + String frmId,
  628 + ProductInfo info,
  629 + String type,
  630 + String version
  631 + ) {
  632 +
  633 + String out_trade_no = getOrderId(frmId);//上一步生成的订单
  634 + Map<String, String> map = new LinkedHashMap<>();
  635 + if (!TextUtils.isEmpty(account))
  636 + map.put("account", account);
  637 +
  638 + map.put("attach.plat", "a"); //附加字段
  639 + map.put("attach.prdId", info.getPrdId()); //附加字段
  640 + map.put("attach.version",version ); //附加字段
  641 + map.put("attach.sid", String.valueOf(sid)); //附加字段
  642 + map.put("attach.spId", USER_SPID); //附加字段
  643 + map.put("body", info.getTitle()); //订单信息
  644 + map.put("frmId", frmId); //渠道
  645 + map.put("notify_url", "http://apps.pay.cnlive.com/upappnotify/notify/orderForVideo"); //回调通知URL
  646 + map.put("out_trade_no", out_trade_no); //业务系统中的 订单号
  647 + map.put("sp_id", SPID);
  648 + if (BuildConfig.DEBUG){
  649 + map.put("total_fee", "1"); //订单总价
  650 + } else {
  651 + map.put("total_fee", "" + info.getRmb()); //订单总价
  652 + }
  653 + map.put("type", type); //渠道
  654 + map.put("sign", getSign(map, TOKEN_KEY));//签名上面生成的sign
  655 +
  656 + return map;
  657 +}
  658 +
  659 +```
  660 +预支付:
  661 +网络请求代码如下:(各团队网络请求封装不一样这里只显示最简单网络请求相应的第三方库如下: (compile 'com.squareup.retrofit2:retrofit:2.0.2'
  662 + compile 'com.squareup.retrofit2:converter-gson:2.0.2'
  663 + compile 'com.squareup.retrofit2:adapter-rxjava:2.0.2')
  664 +
  665 +```java
  666 +
  667 + RestAdapter restAdapter = new RestAdapter.Builder()
  668 + .setLogLevel(RestAdapter.LogLevel.FULL)
  669 + .setEndpoint("http://unifypay.cnlive.com")
  670 + .setClient(new OkClient(new OkHttpClient()))
  671 + .build();
  672 + restAdapter.create(VipPayService.class).newWay2PayVideo(map, new Callback<UnifyPayMessage>() {
  673 + @Override
  674 + public void success(UnifyPayMessage unifyPayMessage, Response response) {
  675 + Logger.e(response.getUrl());
  676 + Logger.e(unifyPayMessage.toString());
  677 + if (unifyPayMessage != null && unifyPayMessage.getStatus().equals("0")) {
  678 + LOGD("=====================aplipay =====================");
  679 +
  680 + startPay(unifyPayMessage);
  681 + } else {
  682 + LOGE("支付错误:" + unifyPayMessage.getMsg() + ", url:" + response.getUrl());
  683 + }
  684 + }
  685 +
  686 + @Override
  687 + public void failure(RetrofitError error) {
  688 + LOGE("支付错误:" + error.getUrl() + ", msg:" + error.getMessage());
  689 +
  690 + }
  691 + });
  692 +
  693 +```
  694 +### 辅助类如下
  695 +接口类:
  696 +
  697 +```java
  698 +public interface VipPayService {
  699 + @GET("/prepay")
  700 + void newWay2PayVideo(@QueryMap Map<String, String> options,
  701 + Callback<UnifyPayMessage> callback);
  702 +
  703 +}
  704 +```
  705 +
  706 +### bean类:
  707 +```java
  708 +public class UnifyPayMessage {
  709 +
  710 + private String status;
  711 + private String msg;
  712 + private String notify_url;
  713 + private String order_id;
  714 + private String alipay_app;
  715 + private WXPrepayInfo wx_app;
  716 +
  717 + public String getStatus() {
  718 + return status;
  719 + }
  720 +
  721 + public void setStatus(String status) {
  722 + this.status = status;
  723 + }
  724 +
  725 + public String getMsg() {
  726 + return msg;
  727 + }
  728 +
  729 + public void setMsg(String msg) {
  730 + this.msg = msg;
  731 + }
  732 +
  733 + public String getNotify_url() {
  734 + return notify_url;
  735 + }
  736 +
  737 + public void setNotify_url(String notify_url) {
  738 + this.notify_url = notify_url;
  739 + }
  740 +
  741 + public String getOrder_id() {
  742 + return order_id;
  743 + }
  744 +
  745 + public void setOrder_id(String order_id) {
  746 + this.order_id = order_id;
  747 + }
  748 +
  749 + public WXPrepayInfo getWx_app() {
  750 + return wx_app;
  751 + }
  752 +
  753 + public void setWx_app(WXPrepayInfo wx_app) {
  754 + this.wx_app = wx_app;
  755 + }
  756 +
  757 + public String getAlipay_app() {
  758 + return alipay_app;
  759 + }
  760 +
  761 + public void setAlipay_app(String alipay_app) {
  762 + this.alipay_app = alipay_app;
  763 + }
  764 +
  765 + @Override
  766 + public String toString() {
  767 + return "UnifyPayMessage{" +
  768 + "status='" + status + '\'' +
  769 + ", msg='" + msg + '\'' +
  770 + ", notify_url='" + notify_url + '\'' +
  771 + ", order_id='" + order_id + '\'' +
  772 + ", alipay_app='" + alipay_app + '\'' +
  773 + ", wx_app=" + wx_app +
  774 + '}';
  775 + }
  776 +}
  777 +
  778 +```
  779 +
  780 +7)支付以及结果判断 <br>
  781 +支付宝支付:
  782 +第一步为异步支付,第二步异步支付结果判断是否成功
  783 +支付:
  784 +
  785 +```java
  786 +
  787 + private void startPay(final UnifyPayMessage unifyPayMessage) {
  788 + if(unifyPayMessage == null || unifyPayMessage.getAlipay_app() == null)return;
  789 + try {
  790 + //签名拼接支付信息操作交由后台
  791 + LOGD("ExternalPartner start pay");
  792 + // start the pay.
  793 + Runnable payRunnable = new Runnable() {
  794 + @Override
  795 + public void run() {
  796 + PayTask alipay = new PayTask(mActivity);
  797 + String result = alipay.pay(unifyPayMessage.getAlipay_app());
  798 +
  799 + Message msg = new Message();
  800 + msg.what = SDK_PAY_FLAG;
  801 + msg.obj = result;
  802 + alipayHandler.sendMessage(msg);
  803 + }
  804 + };
  805 +
  806 + Thread payThread = new Thread(payRunnable);
  807 + payThread.start();
  808 +
  809 + } catch (Exception ex) {
  810 + LOGE("alipay error".concat(ex.getMessage()), ex);
  811 + ToastUtil.show(mActivity,
  812 +mActivity.getString(R.string.remote_call_failed));
  813 + }
  814 +}
  815 +
  816 +```
  817 +
  818 +结果判断:
  819 +
  820 +```java
  821 +
  822 + private Handler alipayHandler = new Handler() {
  823 + @Override
  824 + public void handleMessage(Message msg) {
  825 + switch (msg.what) {
  826 + case SDK_PAY_FLAG:
  827 + closeProgress();
  828 + if (mActivity != null) {
  829 + Result resultObj = new Result((String) msg.obj);
  830 + String resultStatus = resultObj.resultStatus;
  831 +
  832 + // 判断resultStatus 为“9000”则代表支付成功,具
  833 +体状态码代表含义可参考接口文档
  834 + if (resultStatus.equals("9000")) {
  835 + ToastUtil.show(mActivity, "支付成功");
  836 + EventBus.getDefault().post(new
  837 +EventPayment(PayUtil.PAY_TYPE_ALIPAY, PayUtil.PAY_RESULT_STATUS_SUCCESS));
  838 + } else {
  839 + // 判断resultStatus 为非“9000”则代表可能支付失败
  840 + // “8000” 代表支付结果因为支付渠道原因或
  841 +者系统原因还在等待支付结果确认,最终交易是否成功以服务端异步通知为准
  842 +(小概率状态)
  843 + if (resultStatus.equals("8000")) {
  844 + ToastUtil.show(mActivity, "支付结果确认中");
  845 + } else {
  846 + ToastUtil.show(mActivity, "支付失败");
  847 + EventBus.getDefault().post(new
  848 +EventPayment(PayUtil.PAY_TYPE_ALIPAY, PayUtil.PAY_RESULT_STATUS_FAIL));
  849 + }
  850 + }
  851 + }
  852 + break;
  853 + default:
  854 + break;
  855 + }
  856 + }
  857 + };
  858 +
  859 +```
  860 +
  861 +微信支付:
  862 +
  863 +```java
  864 +
  865 +//预支付订单生成之后调用支付订单
  866 +private void genPayReq(UnifyPayMessage unifyPayMessage) {
  867 + PayReq req = new PayReq();
  868 + req.appId = unifyPayMessage.getWx_app().getAppid();
  869 + req.partnerId = unifyPayMessage.getWx_app().getPartnerid();
  870 + req.prepayId = unifyPayMessage.getWx_app().getPrepayid();
  871 + req.packageValue = "Sign=WXPay";
  872 + req.nonceStr = unifyPayMessage.getWx_app().getNoncestr();
  873 + req.timeStamp = unifyPayMessage.getWx_app().getTimestamp();
  874 + req.sign = unifyPayMessage.getWx_app().getSign();
  875 +
  876 + // 发起支付请求
  877 + msgApi.registerApp(Constants.APP_ID);
  878 + msgApi.sendReq(req);
  879 + }
  880 +
  881 +```
610 882 \ No newline at end of file
... ...