android 集成微信支付(已模拟统一下单)

                               android 集成微信支付(已模拟统一下单)

 微信支付和支付宝支付是我们现在覆盖电商爆炸app的一个必备功能,那么微信支付是怎么实现的呢?我们今天理一下步骤。我是在h5调android原生接口,所以android端就实现了一个微信支付接口,但是思路是一致的。我这里模拟统一下单主要是可以走一个完成的支付流程,实际开发中模拟统一下单是你后台人员负责这个接口,后台需要打通订单系统,你只需要调用后台接口返回预支付id,然后在调用支付接口即可。

首先看一下整体支付效果截图

再来说下流程,流程是传入所需要的10大参数,调用统一下单接口,获取到预支付id,然后在调用支付接口,最后微信回调即整过流程完成。

所以先去阅读以下微信app支付开发文档是很有必要的。链接是https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_5

在查看以下API列表也是很有必要的,链接是https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_1

一、微信开放平台

创建应用,获取appid,平台上填写签名需要注意一下,必须一致,如果是release的话那么后期测试的时候就release包测试,不过很不方便,所以在测试期间一般直接用debug版本的包,方便测试。

二、微信商户平台

获取得到商户号并在商户平台配置API密钥(生成预支付订单号需要)

三、代码整体目录展示(android项目)

四、代码

1、build.gradle集成:

    // 微信支付包
    compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'
    // xml和对象互转
    compile group: 'com.thoughtworks.xstream', name: 'xstream', version: '1.3.1'

2、AndroidManifest.xml 加入注册antivity和权限

(1)activity

        <!--微信支付注册-->
        <activity
            android:name=".wxapi.WXPayEntryActivity"
            android:exported="true"
            android:launchMode="singleTop"/>

(2)权限

<uses-permission android:name="android.permission.INTERNET" />

3、JavaScriptUtils类: js调用android入口,也是程序入口处

   public static PrepayIdInfo bean = null; 
   /**
     * 微信支付
     */
    @JavascriptInterface
    public void wxPayClient(String shoppingDesc, String orderNo, int totalMoney) {
        // 请求统一下单服务 生成预支付Id
        OrederSendInfo sendInfo = new OrederSendInfo(Config.APP_ID,Config.MCH_ID,new WXPayUtils().genNonceStr(),shoppingDesc,orderNo,String.valueOf(totalMoney),"127.0.0.1","http://www.weixin.qq.com/wxpay/pay.php","APP");
        NetWorkFactory.UnfiedOrder(sendInfo, new NetWorkFactory.Listerner() {
            @Override
            public void Success(String data) {
                // data是xml,从xml里面获取prepay_id
                XStream xStream = new XStream();
                xStream.alias("xml", PrepayIdInfo.class);
                bean = (PrepayIdInfo) xStream.fromXML(data);
                System.out.println(bean.toString());
                // 调用微信支付
                new WXPayUtils().Pay(bean.getPrepay_id());
            }

            @Override
            public void Faiulre(String data) {
            }
        });
    }

4、OrederSendInfo类

package com.iwiteks.PalmarTourism.bean;

import com.thoughtworks.xstream.annotations.XStreamAlias;

/**
 * 统一下单信息
 * Created by xmg on 2016/12/5.
 */
@XStreamAlias("xml")
public class OrederSendInfo {

//    应用ID		appid
//    商户号		mch_id
//    随机字符串	nonce_str	随机数生成算法
//    商品描述	body		鹅豆-旅游
//    商户订单号	out_trade_no	32个字符内
//    总金额		total_fee       单位:分
//    终端IP		spbill_create_ip
//    通知地址	notify_url
//    交易类型	trade_type	APP

//    签名		sign		签名生成算法

    private String appid;
    private String mch_id;
    private String nonce_str;
    private String body;
    private String out_trade_no;
    private String total_fee;
    private String spbill_create_ip;
    private String notify_url;
    private String trade_type;

    private String sign;

    public OrederSendInfo(String appid, String mch_id, String nonce_str, String body, String out_trade_no, String total_fee, String spbill_create_ip, String notify_url, String trade_type) {
        this.appid = appid;
        this.mch_id = mch_id;
        this.nonce_str = nonce_str;
        this.body = body;
        this.out_trade_no = out_trade_no;
        this.total_fee = total_fee;
        this.spbill_create_ip = spbill_create_ip;
        this.notify_url = notify_url;
        this.trade_type = trade_type;
    }

    public String getAppid() {
        return appid;
    }

    public void setAppid(String appid) {
        this.appid = appid;
    }

    public String getMch_id() {
        return mch_id;
    }

    public void setMch_id(String mch_id) {
        this.mch_id = mch_id;
    }

    public String getNonce_str() {
        return nonce_str;
    }

    public void setNonce_str(String nonce_str) {
        this.nonce_str = nonce_str;
    }

    public String getBody() {
        return body;
    }

    public void setBody(String body) {
        this.body = body;
    }

    public String getOut_t
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值