Unity 集成支付-微信篇

本文详细介绍了在Android Studio环境中集成微信支付SDK的过程,包括解决路径配置、签名获取及避免闪退等问题,并提供了一段示例代码说明如何进行微信支付接口调用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考连接:http://blog.youkuaiyun.com/rcfalcon/article/details/52518700
http://blog.youkuaiyun.com/yupu56/article/details/72772383

因为项目已经用android studio集成过讯飞语音测。所以集成微信也从AS入手。

先说坑点:

1、路径:微信支付和分享如果不绕过审核。必须有回调脚本且路径必须在包下面的wxapi文件夹里这个在我集成sharesdk过程中折腾了半天。因为里面已经单独有分享回调了。此图是我合并xml和把分享回调脚本单拎出来放入wxapi的。
微信分享必须路径
2、签名:通过微信资源下载下载签名工具。安装app后输入包名返回签名。填下到微信开放平台里
开放平台需要填写参数
3、最坑点:根据微信资源中心AS集成文档集成方法Android Studio环境下:已改用gradle形式,发布到jcenter( http://jcenter.bintray.com/),请开发者使用gradle来编译、更新微信SDK。 导入后。createWXAPI必定闪退。改为手动导入libammsdk.lib包后就不会闪退了。

开始接入sdk。此方法有后台支持。无后台支持直接参考上面第一个连接,我没试。

这个代码基本全是第一个连接改的有后台版本。不需要在AS里写代码,很方便。

 AndroidJavaObject WXApi
    {
        get
        {
            if (_wxApi == null)
            {
                AndroidJavaClass apiFactory = new AndroidJavaClass("com.tencent.mm.sdk.openapi.WXAPIFactory");
                _wxApi = apiFactory.CallStatic<AndroidJavaObject>("createWXAPI",
                    currentActivity,
                    "微信appid",
                    false
                );
            }
            return _wxApi;
        }
    }
    static AndroidJavaObject _wxApi;
    /// <summary>
    /// 微信支付接口
    /// </summary>
    /// <param name="payInfo">支付信息</param>
    /// <returns></returns>
    public IEnumerator WeiXinPay(PayInfo payInfo) {
     //payinfo包含和后台沟通参数。
        Dictionary<string, string> headdress = new Dictionary<string, string>
        {
          //  { "Cookie",/*这里用户登陆后请求下的cookie。用于和服务端确认用户。  
          //     www.responseHeaders["SET-COOKIE"] */) }
        };
        string data = "参数1=x&参数2=y&参数3=z";//传多个参数方法
        byte[] bs = System.Text.Encoding.UTF8.GetBytes(data);
        WWW www = new WWW("url", bs, headdress);
        yield return www;
        if (www.error != null)
        {
            Debug.Log(www.error);
        }
        else
        {
            var userOrder = JsonMapper.ToObject(www.text);
            print(userOrder["message"]);
            if (userOrder["errno"].ToString() == "0")
            {
                var orderInfo = userOrder["result"];

                Dictionary<string, string> paras = new Dictionary<string, string>();
                //BY CG:由于wechat android sdk中的变量与签名标志不一致,所以分开写,#前面是签名属性,后面对应的SDK中变量名
                paras.Add("appid#appId", orderInfo["appid"].ToString());
                paras.Add("partnerid#partnerId", orderInfo["partnerid"].ToString()); //商户号
                paras.Add("prepayid#prepayId", orderInfo["prepayid"].ToString());
                paras.Add("package#packageValue", "Sign=WXPay"); //暂填写固定值Sign=WXPay
                paras.Add("noncestr#nonceStr", orderInfo["noncestr"].ToString()); //随机字符串
                paras.Add("timestamp#timeStamp", orderInfo["timestamp"].ToString());
                paras.Add("sign#sign", orderInfo["sign"].ToString()); //应用签名

                var request = new AndroidJavaObject("com.tencent.mm.sdk.modelpay.PayReq");
                foreach (var kv in paras)
                {
                    request.Set(kv.Key.Split('#')[1], kv.Value);
                }
                bool ret = WXApi.Call<bool>("sendReq", request);
            }
            else
            {

            }
        }
    }

在xml中需要添加

        <!--&lt;!&ndash;微信支付&ndash;&gt;-->
        <activity
            android:name=".wxapi.WXPayEntryActivity"
            android:exported="true"
            android:launchMode="singleTop"/>

然后是微信支付回调方法

注:android studio中。 包名下wxapi文件夹下WXPayEntryActivity脚本里。

package com.shuoshuoshuo.englishtongue.wxapi;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.Toast;

import com.shuoshuoshuo.englishtongue.MainActivity;
import com.tencent.mm.sdk.constants.ConstantsAPI;
import com.tencent.mm.sdk.modelbase.BaseReq;
import com.tencent.mm.sdk.modelbase.BaseResp;
import com.tencent.mm.sdk.openapi.IWXAPI;
import com.tencent.mm.sdk.openapi.IWXAPIEventHandler;
import com.tencent.mm.sdk.openapi.WXAPIFactory;
import com.unity3d.player.UnityPlayer;
//import com.tencent.mm.opensdk.utils.Log;

import net.sourceforge.simcpux.Constants;

//必须实现接口,重写方法
public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler {

    private IWXAPI api;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        try {
            super.onCreate(savedInstanceState);
        }catch (Exception e){
            finish();
        }
        api = WXAPIFactory.createWXAPI(this,"微信appid");
        api.handleIntent(getIntent(), this);
    }
    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        setIntent(intent);
        api.handleIntent(intent, this);
    }

    @Override
    public void onReq(BaseReq baseReq) {

    }

    @Override
    public void onResp(BaseResp baseResp) {

        if (baseResp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
            int retCode = baseResp.errCode;
            //返回结果发送给unity 处理
            UnityPlayer.UnitySendMessage("","WXPayCallback", String.valueOf(retCode));
            //跳转界面 需要跳转的active要填写正确
            Intent intent=new Intent(this, MainActivity.class);
            this.startActivity(intent);
            finish();
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值