Android微信支付

本文介绍了在Android上实现微信支付的详细步骤,包括配置常量参数、使用统一下单接口下单、Retrofit的配置和调用,以及签名的处理。在微信支付过程中,开发者需要处理XML格式的请求参数,配置Retrofit进行网络请求,并确保应用签名与微信开放平台的设置一致。
摘要由CSDN通过智能技术生成

Android微信支付

  项目要上支付功能,老大让我写一个支付的demo看看效果。支付宝和微信都要。支付宝还好说,有一整套的测试环境(沙箱),一上午就做出来了。
  微信就不得了了,从头到尾你得自己写。老大说了,现在后台比较忙。你先自己下单,自己支付,自己···
  微信支付-APP支付的整体流程是:通过下单接口向微信的服务器下单,用微信返回的订单信息调支付接口。本身也不难,但是微信的文档啊。是真TMD烂。全网最烂,没有之一。

1.通过微信的统一下单接口下单

1.1配置常量参数

appId:是微信开放平台!!!里面的AppID(微信开放平台->管理中心->应用详情)
partnerId:是微信商户平台!!!里的微信支付商户号(微信商户平台->账户中心->商户信息)
privateKey:是微信商户平台!!!里的API秘钥。秘钥默认是不显示的,只能重置。(微信商户平台->账户中心->API安全)

    val WX_APP_ID = "" //微信分配的APP_ID
    val WX_PARTNER_ID = "" //微信分配的 PARTNER_ID (商户ID)
    val WX_PRIVATE_KEY = "" //微信分配的 PRIVATE_KEY (私钥)

    var ORDER_NUM = ""//订单号
    var NONEC_STR = ""//随机字符串
    var IP = ""//手机ip
    val URL = "www.baidu.com"//回调地址
    val ENCRYPT_WAY = "MD5"//加密方式

1.2下单接口的的请求xml

  没错,微信的接口请求参数要求XML格式(日了狗)。你让我一个Android写xml请求(手动黑人问号)。

        var xmlStr = """<xml>
                           <appid>$WX_APP_ID</appid>
                           <body>$ORDER_CONTENT</body>
                           <mch_id>$WX_PARTNER_ID</mch_id>
                           <nonce_str>$NONEC_STR</nonce_str>
                           <notify_url>$URL</notify_url>
                           <out_trade_no>$ORDER_NUM</out_trade_no>
                           <spbill_create_ip>$IP</spbill_create_ip>
                           <total_fee>1</total_fee>
                           <trade_type>APP</trade_type>
                           <sign_type>$ENCRYPT_WAY</sign_type>
                        </xml>
                    """

1.3Retrofit配置

  微信官方demo用的是httpclient+eclipse项目(我敲尼玛啊)
  我这里用的是Retrofit(之所以没有Rxjava是xml解析比较麻烦,手动解析比较快)

gradle配置一下
    implementation "com.squareup.retrofit2:retrofit:2.3.0"
    //日志拦截器
    implementation "com.squareup.okhttp3:logging-interceptor:3.5.0"
interface RetrofitService {

    companion object {
        val BaseURL: String = "https://api.mch.weixin.qq.com"//访问接口的ip和端口
    }

    @POST("/pay/unifiedorder")
    fun getWxOrderInfo(@Body body: RequestBody): Call<ResponseBody> //获取微信支付订单
}
fun getWxOrderInfo(xml: String, callback: Callback<ResponseBody>) {
            //拦截器(打印网络请求log)
            var logInterceptor: HttpLoggingInterceptor = HttpLoggingInterceptor(HttpLogger())
            logInterceptor.level = HttpLoggingInterceptor.Level.BASIC
            var okHttpClient: OkHttpClient = OkHttpClient.Builder()
                    .sslSocketFactory(SSLSocketFactoryUtils.createSSLSocketFactory(), SSLSocketFactoryUtils.createTrustAllManager())//
                    .connectTimeout(10, TimeUnit.SECONDS)//设置超时时间
                    .readTimeout(10, TimeUnit.SECONDS)
                    .writeTimeout(10, TimeUnit.SECONDS)
                    .addInterceptor(logInterceptor)//添加拦截器
                    .build()

            var retrofit = Retrofit.Builder()
                    ?.baseUrl(RetrofitService.BaseURL)
                    ?.addConverterFactory(SimpleXmlConverterFactory.create())
                    ?.client(okHttpClient)
                    ?.build()

            var api = retrofit?.create(RetrofitService::class.java)
            var body = RequestBody.create(MediaType.parse("application/xml;charset=UTF-8"), xml)
            api?.getWxOrderInfo(body)
                    ?.enqueue(callback)
        }

1.4统一下单

  在1.3中已经配置好了网络请求。在1.2中xml请求参数也配置好了,那么就可以直接进行下单了。下面主要说下各个必传参数代表什么(官方文档也写得很清楚,以官方文档为准)。
  appid:是微信平台给你的APP项目分配的唯一标识
  mch_id:商户号
  nonce_str:随机字符串
  notify_url:接收微信支付异步通知回调地址(我这里是客户端不需要回调,所有随便填的百度)
  body:商品描述
  out_trade_no:商户订单号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值